gpt4 book ai didi

python - 在 Pandas 中将日期列转换为工作日名称的更快方法

转载 作者:行者123 更新时间:2023-11-28 20:17:33 26 4
gpt4 key购买 nike

这是我通过 pd.read_csv() 读取的输入 csv 文件

ProductCode,Date,Receipt,Total
x1,07/29/15,101790,17.35
x2,07/29/15,103601,8.89
x3,07/29/15,103601,8.58
x4,07/30/15,101425,11.95
x5,07/29/15,101422,1.09
x6,07/29/15,101422,0.99
x7,07/29/15,101422,3
y7,08/05/15,100358,7.29
x8,08/05/15,100358,2.6
z3,08/05/15,100358,2.99


import pandas as pd
df = pd.read_csv('product.csv')

#I have to add some columns to the data:

df['Receipt_Count'] = df.groupby(['Date','Receipt'])['Receipt'].transform('count')
df['Day_of_Week'] = pd.to_datetime(df['Date']).dt.weekday_name

我的 csv 文件中有大约 800K 行。当我运行将日期转换为 weekday_name 的代码行时,大约需要 2 分钟。我知道我首先将我的“日期”列转换为日期时间,因为它被视为来自 csv 的字符串,然后它被转换为对应的工作日。有什么办法可以缩短转换时间?

我是 Pandas/Python 的新手,所以我不确定我是否遗漏了什么。

最佳答案

指定日期字符串的格式将大大加快转换速度:

df['Day_of_Week'] = pd.to_datetime(df['Date'], format='%m/%d/%y').dt.weekday_name

这里有一些基准:

import io
import pandas as pd

data = io.StringIO('''\
ProductCode,Date,Receipt,Total
x1,07/29/15,101790,17.35
x2,07/29/15,103601,8.89
x3,07/29/15,103601,8.58
x4,07/30/15,101425,11.95
x5,07/29/15,101422,1.09
x6,07/29/15,101422,0.99
x7,07/29/15,101422,3
y7,08/05/15,100358,7.29
x8,08/05/15,100358,2.6
z3,08/05/15,100358,2.99
''')

df = pd.read_csv(data)
%timeit pd.to_datetime(df['Date']).dt.weekday_name
# => 100 loops, best of 3: 2.48 ms per loop
%timeit pd.to_datetime(df['Date'], format='%m/%d/%y').dt.weekday_name
# => 1000 loops, best of 3: 507 µs per loop

large_df = pd.concat([df] * 1000)
%timeit pd.to_datetime(large_df['Date']).dt.weekday_name
# => 1 loop, best of 3: 1.62 s per loop
%timeit pd.to_datetime(large_df['Date'], format='%m/%d/%y').dt.weekday_name
# => 10 loops, best of 3: 45.9 ms per loop

即使对于您在 OP 中提供的小样本,性能也会提高 5 倍——对于更大的数据框,它会变得非常非常好。

关于python - 在 Pandas 中将日期列转换为工作日名称的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39548139/

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