python - 更改具有重复列标题的数据框列中的数据类型

标签 python pandas

我有以下数据框:

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 更改为 date,从 19970102 到 1997-01-02。我尝试了以下代码

stock_dataframe['DTYYYYMMDD'] = pd.to_datetime(stock_dataframe['DTYYYYMMDD'].astype(str), format='%Y%m%d')

我收到以下错误:“ValueError:无法使用重复的键进行组装”

最佳答案

这是我建议申请的罕见情况之一:

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(...)

如果您不确定何时存在重复列(以及何时不存在),这非常有用。

关于python - 更改具有重复列标题的数据框列中的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55011313/

相关文章:

Python HTML 表格抓取(打印)

python - Django 获取所有用户

python - 如何扩展或 "zoom"pandasplot()图?

python - 将 pandas 数据帧的特定行复制 X 次

python - Pandas :如何对每一行应用转换?

python - 'numpy.reshape' 和 'ndarray.reshape' 如何等效?

python - ListCtrl(或 ObjectListView)中的自动换行

python-3.x - 连接多个具有相同列名的 CSV

python - 如何在Python中将数据帧的字段转换为int?

Python等价物。 PHP foreach []?