Moh*_*ghi 6 python dataframe pandas
我有一个以下的 Pandas DataFrame:
df = pd.DataFrame({'a': ['2020-01-02', '2020-01-02']})
显然,列“a”是字符串。我想将其转换为“日期”类型;这就是我所做的:
df['a'] = df['a'].apply(pd.to_datetime).dt.date
它有效,但实际上我的 DataFrame 有 500,000 多行。看起来效率很低。有没有办法直接更有效地将字符串列转换为日期列?
Pau*_*l H 14
pandas.DataFrame.apply本质上是一个原生的Pythonfor循环。
pandas.to_datetime是一个向量化函数,这意味着它通过在 C 中执行内部循环来对序列/列表/数组/系列进行操作
如果我们从更大的数据框开始:
\nimport pandas\ndf = pandas.DataFrame({\'a\': [\'2020-01-02\', \'2020-01-02\'] * 5000})\nRun Code Online (Sandbox Code Playgroud)\n然后执行(在 jupyter 笔记本中)
\n%%timeit\ndf[\'a\'].apply(pandas.to_datetime).dt.date\nRun Code Online (Sandbox Code Playgroud)\n我们得到一个相当慢的结果:
\n1.03 s \xc2\xb1 48.9 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\nRun Code Online (Sandbox Code Playgroud)\n但如果我们稍微重新排列一下以传递整个列:
\n%%timeit\ndf[\'a\'].apply(pandas.to_datetime).dt.date\nRun Code Online (Sandbox Code Playgroud)\n我们得到更快的结果:
\n6.07 ms \xc2\xb1 232 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
13143 次 |
| 最近记录: |