我正在读一个excel到pandas,所有列标题都是datetime,除了第一个。我想格式化datetime列标题。
这是测试数据和代码。
import pandas as pd
import datetime
d = {
datetime.datetime(2018, 01, 31, 8, 00): [9.1, 8.5, 7.4, 6.5, 5.3],
datetime.datetime(2018, 02, 28, 9, 00): [9.2, 8.5, 7.2, 6.1, 5.2],
datetime.datetime(2018, 03, 31, 10, 00): [9.3, 8.5, 7.1, 6.1, 5.1],
'ID': [1, 2, 3, 4, 5],
}
df = pd.DataFrame(d, columns= ['ID', datetime.datetime(2018, 01, 31, 8, 00), datetime.datetime(2018, 02, 28, 9, 00), datetime.datetime(2018, 03, 31, 10, 00)])
df.loc[:, df.columns != 'ID'].columns = [x.date() for x in df.loc[:, df.columns != 'ID'].columns]
我想将datetime标头格式化为日期。例如:将2018-01-31 08:00:00
更新为2018-01-31
。
我使用.date()
函数来实现这一目标。我认为我的做法是错误的。
下面的行不会更新datetime列标题。
df.loc[:, df.columns != 'ID'].columns = [x.date() for x in df.loc[:, df.columns != 'ID'].columns]
感谢。
答案 0 :(得分:1)
import pandas as pd
import datetime
d = {
datetime.datetime(2018, 01, 31, 8, 00): [9.1, 8.5, 7.4, 6.5, 5.3],
datetime.datetime(2018, 02, 28, 9, 00): [9.2, 8.5, 7.2, 6.1, 5.2],
datetime.datetime(2018, 03, 31, 10, 00): [9.3, 8.5, 7.1, 6.1, 5.1],
'ID': [1, 2, 3, 4, 5],
}
df = pd.DataFrame(d, columns= ['ID', datetime.datetime(2018, 01, 31, 8, 00), datetime.datetime(2018, 02, 28, 9, 00), datetime.datetime(2018, 03, 31, 10, 00)])
df.columns = [x.date() if isinstance(x, datetime.datetime) else x for x in df.columns]
print(df.columns)
<强>输出:强>
ID 2018-01-31 2018-02-28 2018-03-31
0 1 9.1 9.2 9.3
1 2 8.5 8.5 8.5
2 3 7.4 7.2 7.1
3 4 6.5 6.1 6.1
4 5 5.3 5.2 5.1
答案 1 :(得分:1)
import pandas as pd
import datetime
d = {
datetime.datetime(2018, 01, 31, 8, 00): [9.1, 8.5, 7.4, 6.5, 5.3],
datetime.datetime(2018, 02, 28, 9, 00): [9.2, 8.5, 7.2, 6.1, 5.2],
datetime.datetime(2018, 03, 31, 10, 00): [9.3, 8.5, 7.1, 6.1, 5.1],
'ID': [1, 2, 3, 4, 5],
}
df = pd.DataFrame(zip(*d.values()), columns= map(lambda ele: ele if isinstance(ele, str) else ele.date(), d.keys()))
df
2018-01-31 2018-02-28 2018-03-31 ID
0 9.1 9.2 9.3 1
1 8.5 8.5 8.5 2
2 7.4 7.2 7.1 3
3 6.5 6.1 6.1 4
4 5.3 5.2 5.1 5
答案 2 :(得分:1)
从版本0.15.0的pandas开始,您可以使用.dt
访问者来获取将返回datetime.date dtype
df['dates_without_time'] = df['datetime'].dt.date