python - 将数据框列名称从字符串格式更改为日期时间

标签 python pandas dataframe string-to-datetime

我有一个数据框,其中列的名称是字符串形式的日期(年-月)。如何将这些名称转换为日期时间格式? 我试过这样做:

new_cols = pd.to_datetime(df.columns)
df = df[new_cols]

但是我得到了错误:

KeyError: "DatetimeIndex(
['2000-01-01', '2000-02-01',
 '2000-03-01', '2000-04-01',
 '2000-05-01', '2000-06-01', 
'2000-07-01', '2000-08-01',               
'2000-09-01', '2000-10-01',
'2015-11-01', '2015-12-01', 
'2016-01-01', '2016-02-01',
'2016-03-01', '2016-04-01', 
'2016-05-01', '2016-06-01',
'2016-07-01', '2016-08-01'],
dtype='datetime64[ns]', length=200, freq=None) not in index"

谢谢!

最佳答案

如果按 loc 列值选择未更改,则得到 KeyError

因此您需要将输出分配给:

df.columns = pd.to_datetime(df.columns)

示例:

cols = ['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01']
vals = np.arange(5)
df = pd.DataFrame(columns = cols, data=[vals])
print (df)
   2000-01-01  2000-02-01  2000-03-01  2000-04-01  2000-05-01
0           0           1           2           3           4

print (df.columns)
Index(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'], dtype='object')

df.columns = pd.to_datetime(df.columns)

print (df.columns)
DatetimeIndex(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01',
               '2000-05-01'],
              dtype='datetime64[ns]', freq=None)

也可以转换为句点:

print (df.columns)
Index(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'], dtype='object')

df.columns = pd.to_datetime(df.columns).to_period('M')

print (df.columns)
PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05'],
             dtype='period[M]', freq='M')

关于python - 将数据框列名称从字符串格式更改为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677850/

相关文章:

Python 文件上传小部件不工作,它没有在 jupyter notebook 中显示上传按钮

python - 通过连接传播 pandas 系列元数据

Pandas groupby 在系列末尾填充零值

python - PYODBC:无法通过 SQL 查询进行迭代

python - 将列值转换为整数列 - Pandas

Python 列表到 Pandas 数据框

python - 将 Pandas 数据框乘以字典

python - 如何在 Python 数据框中读取数据 block ?

python - 将多个列值更改为二进制值

python - 如何在Docker镜像中编辑库包