gpt4 book ai didi

python - 将日期字符串转换为 pandas 时间序列索引的最有效方法

转载 作者:行者123 更新时间:2023-11-30 22:36:49 24 4
gpt4 key购买 nike

我的 CSV 数据文件包含以下格式的日期:

In: data["DayIndex"].unique()

Out: array(['04/23/17', '04/20/17', '04/21/17', '04/24/17', '04/22/17',
'05/02/17', '04/27/17', '05/06/17', '04/30/17', '04/25/17',
'04/26/17', '05/04/17'], dtype=object)

我想把它变成一个合适的 pandas 时间序列。我试过这个:

data["DayIndex"] = pandas.DatetimeIndex(data["Day"])

即使是几十万行也需要很长时间。我有哪些选项可以加快解析速度?

最佳答案

data['DayIndex'] = pandas.to_datetime(data['Day'])

合并@ayhan的评论

data['DayIndex'] = pandas.to_datetime(data['Day'], format='%m/%d/%Y')

或者当您从 csv 导入时,请包含 parse_dates

data = read_csv(..., parse_dates=['Day'],
date_parser=lambda s: pandas.datetime.strptime(s, '%m/%d/%y'))
<小时/>

不确定这是否已合并到最新版本的 pandas 中...我不这么认为,至少我没有在“新增功能”部分中看到它...

无论如何,我们可以构建一个自定义解析器来重用旧的解析,而不是重新解析我们已经看到的相同日期。

让我们使用 map 和一些巧妙的散列。

# let u be unique date stings.  We'll do this so that we only parse them once.
u = pd.unique(data['Day'])

# then build a dictionary of these
m = dict(zip(u, pd.to_datetime(u, format='%m/%d/%Y')))

# then use `map` to build the new column
data['DayIndex'] = data['Day'].map(m)

时机

a = np.random.choice(
['04/23/17', '04/20/17', '04/21/17', '04/24/17', '04/22/17',
'05/02/17', '04/27/17', '05/06/17', '04/30/17', '04/25/17',
'04/26/17', '05/04/17'],
100000)

data = pd.DataFrame(dict(Day=a))


%%timeit
u = pd.unique(a)
m = dict(zip(u, pd.to_datetime(u, format='%m/%d/%y')))
data['Day'].map(m)
100 loops, best of 3: 15.4 ms per loop

%timeit pd.to_datetime(data['Day'], format='%m/%d/%y')
1 loop, best of 3: 206 ms per loop

关于python - 将日期字符串转换为 pandas 时间序列索引的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44054764/

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