簡體   English   中英

無法從日期時間格式轉換數據框索引

[英]Not able to convert dataframe index from datetime format

下載鏈接 1我從csv文件中提取了原始數據,並將索引列設置為Date.Here在附件中 在此處輸入圖片說明

索引不是日期時間格式,當我嘗試使用以下代碼進行轉換時

df.index=pd.to_datetime(df.index)

我收到此錯誤:

 "ValueError: month must be in 1..12"

索引的當前dtype'object'

我以前看過一些與轉換為日期時間有關的問題,但恐怕我不能用它來解決我的問題。 有人可以幫忙嗎?

謝謝,

存在3種不同類型的日期時間問題-解決方案分別進行解析-為創建不匹配的值NaN ,因此使用Series.combine_first替換它們:

df = pd.read_csv('FFdata1.csv', index_col=['Date'])

df = df.reset_index()

#format YYDDMM
d1 = pd.to_datetime(df['Date'], format='%y%d%m', errors='coerce')
#format YYYY
d2 = pd.to_datetime(df['Date'], format='%Y', errors='coerce')
#format YYYYMM
d3 = pd.to_datetime(df['Date'], format='%Y%m', errors='coerce')

df['Date'] = d1.combine_first(d2).combine_first(d3)

#check not parsed datetimes
print(df[df['Date'].isna()])
     Date  Mkt-RF  SMB  HML   RF
1113  NaT     NaN  NaN  NaN  NaN
1114  NaT     NaN  NaN  NaN  NaN
1115  NaT  Mkt-RF  SMB  HML   RF
1208  NaT     NaN  NaN  NaN  NaN
1209  NaT     NaN  NaN  NaN  NaN

另一個可能的解決方案是創建3個單獨的DataFrame:

df = pd.read_csv('FFdata1.csv', index_col=['Date'])

df = df.reset_index()

#format YYDDMM
d1 = pd.to_datetime(df['Date'], format='%y%d%m', errors='coerce')
df1 = df.assign(Date=d1).dropna(subset=['Date'])
print (df1.head())
        Date Mkt-RF    SMB    HML    RF
0 2019-07-26   2.96   -2.3  -2.87  0.22
1 2019-08-26   2.64   -1.4   4.19  0.25
2 2019-09-26   0.36  -1.32   0.01  0.23
3 2019-10-26  -3.24   0.04   0.51  0.32
4 2019-11-26   2.53   -0.2  -0.35  0.31

#format YYYY
d2 = pd.to_datetime(df['Date'], format='%Y', errors='coerce')
df2 = df.assign(Date=d2).dropna(subset=['Date'])
print (df2.head())
           Date  Mkt-RF    SMB     HML    RF
1116 1927-01-01   29.47  -2.46   -3.75  3.12
1117 1928-01-01   35.39    4.2   -6.15  3.56
1118 1929-01-01  -19.54  -30.8   11.81  4.75
1119 1930-01-01  -31.23  -5.13  -12.28  2.41
1120 1931-01-01  -45.11   3.53  -14.29  1.07

#format YYYYMM
d3 = pd.to_datetime(df['Date'], format='%Y%m', errors='coerce')
df3 = df.assign(Date=d3).dropna(subset=['Date'])
print (df3.head())
        Date Mkt-RF    SMB    HML    RF
0 1926-07-01   2.96   -2.3  -2.87  0.22
1 1926-08-01   2.64   -1.4   4.19  0.25
2 1926-09-01   0.36  -1.32   0.01  0.23
3 1926-10-01  -3.24   0.04   0.51  0.32
4 1926-11-01   2.53   -0.2  -0.35  0.31

該文件包含多個數據系列。 文件的開頭有一個標題行,然后日期格式為%Y%m 但是在第1115行,我們發現一行僅包含空值,其后是文本信息(年度因素:1月-12月),新的標題行,然后是日期格式為%Y年度數據。 這遠遠超出了read_csv可以自動處理的范圍。

因此,我的建議是先加載文件而不嘗試解析Date列,然后拒絕第一個包含空日期的行之后的任何行,然后再解析其余行上的日期。

代碼可以是:

df = pd.read_csv('FFdata1.csv').loc[df.index < df[df.Date.isna()].index[0]]
df['Date'] = pd.to_datetime(df.Date,format='%Y%m')
df.set_index('Date', inplace=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM