【发布时间】:2019-07-30 22:00:10
【问题描述】:
我正在尝试将字符串列表转换为其 ascii 并将每个字符放在数据框中的列中。我有 30M 这样的字符串,我正在运行的代码遇到内存问题。
例如:
strings = ['a','asd',1234,'ewq']
想要得到以下数据框:
0 1 2 3
0 97 0.0 0.0 0.0
1 97 115.0 100.0 0.0
2 49 50.0 51.0 52.0
3 101 119.0 113.0 0.0
我尝试过的:
pd.DataFrame([[ord(chr) for chr in list(str(rec))] for rec in strings]).fillna(0)
错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 435, in __init__
arrays, columns = to_arrays(data, columns, dtype=dtype)
File "/root/anaconda3/lib/python3.7/site-packages/pandas/core/internals/construction.py", line 404, in to_arrays
dtype=dtype)
File "/root/anaconda3/lib/python3.7/site-packages/pandas/core/internals/construction.py", line 434, in _list_to_arrays
content = list(lib.to_object_array(data).T)
File "pandas/_libs/lib.pyx", line 2269, in pandas._libs.lib.to_object_array
MemoryError
不确定是否相关,但strings 实际上是来自另一个数据框的列,带有.values。
此外,最长的字符串几乎是 255 个字符。我知道 30M x 1000 是一个很大的数字。有什么办法可以解决这个问题?
【问题讨论】:
-
30M是一个大列表,你考虑分块保存到txt文件吗?
标签: python pandas numpy dataframe ascii