【发布时间】:2019-02-08 17:26:59
【问题描述】:
我有一个稍微损坏的 CSV 文件,我想在使用 pandas.read_csv() 读取它之前对其进行预处理,即对其进行一些搜索/替换。
我尝试打开文件并在生成器中进行预处理,然后将其交给 read_csv():
def in_stream():
with open("some.csv") as csvfile:
for line in csvfile:
l = re.sub(r'","',r',',line)
yield l
df = pd.read_csv(in_stream())
可悲的是,这只是抛出一个
ValueError: Invalid file path or buffer object type: <class 'generator'>
虽然,在查看 Panda 的源代码时,我希望它能够在迭代器上工作,从而在生成器上工作。
我只找到了这篇 [文章] (Using a custom object in pandas.read_csv()),概述了如何将生成器包装到类似文件的对象中,但它似乎只适用于字节模式的文件。
所以最后我正在寻找一种模式来构建一个打开文件的管道,逐行读取它,允许预处理,然后将其馈送到例如pandas.read_csv()。
【问题讨论】:
-
你试过了吗...
df = pd.DataFrame(in_stream())? -
我认为您需要在 in_stream() 末尾添加
return l。 -
@JonClements 我认为构造函数不适用于迭代器。
-
@JonClements 这确实会消耗来自生成器的输入,但不会像 read_csv() 那样解析字段。
标签: python-3.x pandas