我嘗試通過pandas.read_csv()
的parse_dates解析幾個日期時遇到了這個錯誤。在下面的代碼片段中,我試圖解析格式爲dd/mm/yy
的日期,這導致我進行了不正確的轉換。對於某些情況,日期字段被視爲月份,反之亦然。pd.read_csv在設置parse_date = ['列名']時沒有正確解析日期/月份字段
爲了保持簡單,在某些情況下dd/mm/yy
得到轉換爲yyyy-dd-mm
而不是yyyy-mm-dd
。
情況1:
04/10/96 is parsed as 1996-04-10, which is wrong.
情況2:
15/07/97 is parsed as 1997-07-15, which is correct.
情況3:
10/12/97 is parsed as 1997-10-12, which is wrong.
代碼示例
import pandas as pd
df = pd.read_csv('date_time.csv')
print 'Data in csv:'
print df
print df['start_date'].dtypes
print '----------------------------------------------'
df = pd.read_csv('date_time.csv', parse_dates = ['start_date'])
print 'Data after parsing:'
print df
print df['start_date'].dtypes
篇電流輸出
----------------------
Data in csv:
----------------------
start_date
0 04/10/96
1 15/07/97
2 10/12/97
3 06/03/99
4 //1994
5 /02/1967
object
----------------------
Data after parsing:
----------------------
start_date
0 1996-04-10
1 1997-07-15
2 1997-10-12
3 1999-06-03
4 1994-01-01
5 1967-02-01
datetime64[ns]
期望輸出
----------------------
Data in csv:
----------------------
start_date
0 04/10/96
1 15/07/97
2 10/12/97
3 06/03/99
4 //1994
5 /02/1967
object
----------------------
Data after parsing:
----------------------
start_date
0 1996-10-04
1 1997-07-15
2 1997-12-10
3 1999-03-06
4 1994-01-01
5 1967-02-01
datetime64[ns]
更多評論:
我可以使用date_parser
或pandas.to_datetime()
指定日期的正確格式。但在我的情況下,我有幾個日期字段,如['//1997', '/02/1967']
,我需要將其轉換爲['01/01/1997','01/02/1967']
。 parse_dates
可以幫助我將這些類型的日期字段轉換爲預期的格式,而無需編寫額外的代碼行。
有沒有解決方案?
錯誤鏈接@GitHub:https://github.com/pydata/pandas/issues/13063
你嘗試更新到最新版本0.18大熊貓?問題仍然存在嗎? –
您是否嘗試過將'infer_datetime_format'設置爲'True'? – IanS
我有完全相同的問題!我的臨時解決方案是從Excel文件(而不是CSV)中讀取值,根據系統的本地設置解析日期,但我知道這不是適合大多數開發人員的解決方案。當日> 12時,你會得到正確的日期,因爲熊貓認識到它不能是一個月的價值。 – Shovalt