Python更新Dataframe列类型

2024-04-24 00:39:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将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]

我想格式化日期时间头只是日期。例如:将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]

有什么想法或建议吗?enter image description here

谢谢。你知道吗


Tags: columns代码inimportid标题pandasdf
3条回答
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
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

由于pandas的版本是0.15.0,您可以使用^{}访问器来获取日期(忽略时间),它将返回datetime.date dtype

df['dates_without_time'] = df['datetime'].dt.date

相关问题 更多 >