【发布时间】:2020-02-04 20:49:52
【问题描述】:
以下代码生成一个 CSV,然后再次对其进行解析。 b 列包含每个字段的整数数组。
import pandas as pd
from io import StringIO
import numpy as np
# Create CSV
df = pd.DataFrame(dict(
a=[1,2,3],
b=[[1], [1,2], [1,2,3]]
))
s = df.to_csv()
# ,a,b
# 0,1,[1]
# 1,2,"[1, 2]"
# 2,3,"[1, 2, 3]"
def parse(s):
return np.fromstring(s[1:-1], sep=", ", dtype=int)
df2 = pd.read_csv(StringIO(s), converters=dict(b=parse))
现在的问题是是否可以矢量化/加速解析。我怀疑这可能通过为 b 列指定 dtype 来实现,但我无法弄清楚这将是什么 dtype。
有什么建议吗?
【问题讨论】:
-
是
.csv的要求吗?如果你想要 I/O 操作之间的对象持久性,有更好的文件格式可以存储 python 对象。 -
我目前使用 CSV 的原因是因为我可以轻松地附加到它(逐行)并从各种编程语言(python、c++、node、java)中读取它。但是,我想测试是否可以改用镶木地板。但是我猜 parquet 并没有真正针对附加用例进行优化。您会推荐其他格式吗?
-
我刚刚运行了一些测试并且附加到 Parquet 会导致更大的文件。此外,节点没有官方 Parquet 编写器。
-
啊,我主要想知道是否一切都完全在 python 中。既然不是这样,像
.pkl这样的东西可能不值得。