我有以下数据框:
DTYYYYMMDD TICKER CLOSE ... DTYYYYMMDD TICKER CLOSE
0 19970102 AEF 18.7489 ... 20190222 AEF 7.2500
1 19970102 CVM 1093.7500 ... 20190222 CVM 2.8800
2 19970102 CMT 2.3125 ... 20190222 CMT 7.9750
3 19970102 BKTI.K 3.3750 ... 20190222 BKTI.K 4.0300
我想将所有DTYYYYMMDD列的数据类型从int更改为从19970102到1997-01-02的日期。我尝试了以下代码
stock_dataframe['DTYYYYMMDD'] = pd.to_datetime(stock_dataframe['DTYYYYMMDD'].astype(str), format='%Y%m%d')
我收到以下错误:“ ValueError:无法使用重复的键进行组装”
答案 0 :(得分:3)
这是我推荐apply
的那些罕见情况之一:
df['DTYYYYMMDD'] = df['DTYYYYMMDD'].astype(str).apply(
pd.to_datetime, format='%Y%m%d', errors='coerce'
)
df
DTYYYYMMDD TICKER CLOSE DTYYYYMMDD TICKER CLOSE
0 1997-01-02 AEF 18.7489 2019-02-22 AEF 7.250
1 1997-01-02 CVM 1093.7500 2019-02-22 CVM 2.880
2 1997-01-02 CMT 2.3125 2019-02-22 CMT 7.975
3 1997-01-02 BKTI.K 3.3750 2019-02-22 BKTI.K 4.030
我的答案的更可靠版本考虑了性能。
if isinstance(df['DTYYYYMMDD'], pd.DataFrame):
df['DTYYYYMMDD'] = df['DTYYYYMMDD'].astype(str).apply(...)
else:
df['DTYYYYMMDD'] = pd.to_datetime(...)
如果您不确定何时有重复的列(何时不存在),这将很有用。