【发布时间】:2020-01-11 11:40:29
【问题描述】:
这与大多数人在列表和数据框之间转换时想做的事情有些相反。
我希望将大型数据帧(10M+ 行,20+ 列)转换为字符串列表,其中每个条目都是数据帧中每一行的字符串表示形式。我可以使用 pandas 的 to_csv() 方法来做到这一点,但我想知道是否有更快的方法,因为这被证明是我代码中的瓶颈。
最小工作示例:
import numpy as np
import pandas as pd
# Create the initial dataframe.
size = 10000000
cols = list('abcdefghijklmnopqrstuvwxyz')
df = pd.DataFrame()
for col in cols:
df[col] = np.arange(size)
df[col] = "%s_" % col + df[col].astype(str)
# Convert to the required list structure
ret_val = _df_.to_csv(index=False, header=False).split("\n")[:-1]
对于我的 Core i9 的单个线程上的 10,000,000 行数据帧,上述代码的转换方面大约需要 90 秒,并且高度依赖于 CPU。如果可能的话,我希望将其降低一个数量级。
编辑:我不希望将数据保存到 .csv 或文件中。我只是想将数据框转换为字符串数组。
编辑: 只有 5 列的输入/输出示例:
In [1]: df.head(10)
Out [1]: a b c d e
0 a_0 b_0 c_0 d_0 e_0
1 a_1 b_1 c_1 d_1 e_1
2 a_2 b_2 c_2 d_2 e_2
3 a_3 b_3 c_3 d_3 e_3
4 a_4 b_4 c_4 d_4 e_4
5 a_5 b_5 c_5 d_5 e_5
6 a_6 b_6 c_6 d_6 e_6
7 a_7 b_7 c_7 d_7 e_7
8 a_8 b_8 c_8 d_8 e_8
9 a_9 b_9 c_9 d_9 e_9
In [2]: ret_val[:10]
Out [2]: ['a_0,b_0,c_0,d_0,e_0',
'a_1,b_1,c_1,d_1,e_1',
'a_2,b_2,c_2,d_2,e_2',
'a_3,b_3,c_3,d_3,e_3',
'a_4,b_4,c_4,d_4,e_4',
'a_5,b_5,c_5,d_5,e_5',
'a_6,b_6,c_6,d_6,e_6',
'a_7,b_7,c_7,d_7,e_7',
'a_8,b_8,c_8,d_8,e_8',
'a_9,b_9,c_9,d_9,e_9']
【问题讨论】:
-
您为什么要这样做?我会尽我最大的努力将大部分数据保留在 RAM 之外,当然会被解析为适当的数据类型,以便可以有效地对其进行操作
-
在两个字符串列表之间进行熵和信息比较时需要它。
标签: python python-3.x pandas csv