如何将Datetime列标题(例如2007-03-01 00:00:00)转换为Date-Month-Year格式,即2007-03-01

时间:2019-02-16 06:55:15

标签: python python-3.x pandas dataframe

如何将Datetime列标题(例如2007-03-01 00:00:00)转换为Date-Month-Year格式,即2007-03-01?

我尝试过

df=pd.DataFrame({'Company Name':['3M India Ltd.','A B B India Ltd.'],'2007-03-01 00:00:00':[1571.30,710.20],'2007-04-01 00:00:00':[710.20,818.13]})
df.columns=pd.to_datetime.date(df.columns) 

但是显示错误AttributeError:'function'对象没有属性'date'

1 个答案:

答案 0 :(得分:1)

首先用set_index而不是日期时间列来创建index,然后使用to_datetime,并在必要时用date添加DatetimeIndex.date

df = df.set_index('Company Name')
df.columns = pd.to_datetime(df.columns).date
print (df)
                  2007-03-01  2007-04-01
Company Name                            
3M India Ltd.         1571.3      710.20
A B B India Ltd.       710.2      818.13

另一种解决方案,如果不可能的话,可以通过Series创建columns,然后用errors='coerce'调用to_datetime将所有值从列转换为日期时间,而不是返回的日期是NaT(缺少日期时间的值),因此最后添加fillna来将非日期时间替换为原始列名称:

s = pd.Series(df.columns)
df.columns = pd.to_datetime(s, errors='coerce').dt.date.fillna(s)
print (df)
       Company Name  2007-03-01  2007-04-01
0     3M India Ltd.      1571.3      710.20
1  A B B India Ltd.       710.2      818.13

详细信息

print (pd.to_datetime(s, errors='coerce'))
0          NaT
1   2007-03-01
2   2007-04-01
dtype: datetime64[ns]