首页 > 解决方案 > 将列标题更改为日期格式在数据框中不起作用

问题描述

我有一个数据框,其中所有标题都是字符串格式。但是大多数标题实际上是 YYYY-MM 日期,我想将它们更改为日期格式。

ldnCrimes.columns:

Index(['WardCode', 'Ward Name', 'Borough', 'Major Category', 'Minor Category',
       '2010-04', '2010-05', '2010-06', '2010-07', '2010-08',
       ...
       '2018-03', '2018-04', '2018-05', '2018-06', '2018-07', '2018-08',
       '2018-09', '2018-10', '2018-11', '2018-12'],
      dtype='object', length=110)`

尝试时:

ldnCrime.columns = ldnCrime.columns[:1].tolist() + pd.to_datetime(ldnCrime.columns[5:]).tolist()

但后来我收到以下错误:

ValueError:长度不匹配:预期轴有 110 个元素,新值有 106 个元素

这 4 个元素是非日期标题,我不想更改它们的格式。

但后来我收到以下错误:

ValueError:长度不匹配:预期轴有 110 个元素,新值有 106 个元素

这 4 个元素是非日期标题,我不想更改它们的格式。

在此先感谢您提供的任何帮助。

标签: pythonpandas

解决方案


使用@Henry Yik 评论中的解决方案 - 选择第一个5值:

idx = ['WardCode', 'Ward Name', 'Borough', 'Major Category', 'Minor Category',
       '2010-04', '2010-05', '2010-06', '2010-07', '2010-08',
       '2018-03', '2018-04', '2018-05', '2018-06', '2018-07', '2018-08',
       '2018-09', '2018-10', '2018-11', '2018-12']

ldnCrime = pd.DataFrame(columns=idx)

ldnCrime.columns = ldnCrime.columns[:5].tolist()+pd.to_datetime(ldnCrime.columns[5:]).tolist()

另一个想法是将值转换为Series并使用fillna

c = ldnCrime.columns.to_series()
ldnCrime.columns = pd.to_datetime(c, errors='coerce').fillna(c)

print (ldnCrime.columns)
Index([         'WardCode',         'Ward Name',           'Borough',
          'Major Category',    'Minor Category', 2010-04-01 00:00:00,
       2010-05-01 00:00:00, 2010-06-01 00:00:00, 2010-07-01 00:00:00,
       2010-08-01 00:00:00, 2018-03-01 00:00:00, 2018-04-01 00:00:00,
       2018-05-01 00:00:00, 2018-06-01 00:00:00, 2018-07-01 00:00:00,
       2018-08-01 00:00:00, 2018-09-01 00:00:00, 2018-10-01 00:00:00,
       2018-11-01 00:00:00, 2018-12-01 00:00:00],
      dtype='object')

推荐阅读