gpt4 book ai didi

python - 如何使用Pandas格式化工作表中的所有日期?

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:23 25 4
gpt4 key购买 nike

我的 Excel 文件中有以下工作表数据:

id   data_1                 data_2
1 2018/11/11 00:00 123
2 123 2018/11/2 00:00

excel中的日期实际上是一个 float ,所以我想使用以下语法将其更改为str:

df = df.astype(dtype=str)

但是 pandas 将日期格式 YYYY/MM/DD 更改为 YYYY-MM-DD,所以我在输出中得到了这个:

id   data_1                 data_2
1 2018-11-11 00:00 123
2 123 2018-11-2 00:00

如何将所有日期更改为 str 并保持其格式为 YYYY/MM/DD

我无法使用 df.to_datetime() 或类似的语法,因为并非所有日期都在特定列中。而且我不想遍历所有列来实现它.

我知道的唯一方法是使用正则表达式:

df.replace(['((?<=[0-9]{4})-(?=([0-9]{2}-[0-9]{2})))|((?<=[0-9]{4}-[0-9]{2})-(?=[0-9]{2}))'], ['/'], regex=True)

但是当我在其他 str 数据中有 YYYY-MM-DD 数据时,它会导致错误。

我只想更改工作表中的日期类型,df.astype 可以做到。唯一的问题是我想要 YYYY/MM/DD 而不是 YYYY-MM-DD

一般来说,我想将工作表中的所有日期更改为 str 类型。并将其格式化为YYYY/MM/DD HH:MM:SSastype可以实现第一步。

有没有简单快捷的方法来实现这一目标?

请您阅读。

最佳答案

假设您有一个包含日期时间对象但也包含随机整数的数据框:

df = pd.DataFrame(pd.date_range(dt.datetime(2018,1,1), dt.datetime(2018,1,6)))
df[0][0] = 123
print(df)
0
0 123
1 2018-01-02
2 2018-01-03
3 2018-01-04
4 2018-01-05
5 2018-01-06

现在,您可以使用 df.apply 和此函数 convert 创建一个包含所需格式的日期时间的新列:

def convert(x):
try:
return x.strftime('%Y/%m/%d')
except AttributeError:
return str(x)

df['date'] = df[0].apply(convert)
print(df)

0 date
0 123 123
1 2018-01-02 00:00:00 2018/01/02
2 2018-01-03 00:00:00 2018/01/03
3 2018-01-04 00:00:00 2018/01/04
4 2018-01-05 00:00:00 2018/01/05
5 2018-01-06 00:00:00 2018/01/06

注意:最好先清理日期以避免意外行为。例如这个

df[df[0].apply(lambda x: type(x)==pd._libs.tslibs.timestamps.Timestamp)]

关于python - 如何使用Pandas格式化工作表中的所有日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53099004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com