我正在尝试分块读取和过滤 csv 文件,然后将结果放入数据框中。
这是我用来读取和过滤 csv 的内容:
csv_chunks = pandas.read_csv(filepath, sep = DELIMITER,skiprows = 2, chunksize = 1000, converters = {"A": str, "B": str})
for chunk in csv_chunks:
chunk = chunk[(chunk["B"] + chunk["A"]).isin(acids.tolist())]
当我去连接 block 时
df = pandas.concat(chunk for chunk in csv_chunks)
我收到一条错误消息
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\tools\merge.py
", line 872, in concat
verify_integrity=verify_integrity)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\tools\merge.py
", line 913, in __init__
raise Exception('All objects passed were None')
Exception: All objects passed were None
有几个 block 是空的,但也有非空 block ,所以不确定哪些对象被视为 None。欢迎任何想法!
谢谢, 安妮
请您参考如下方法:
尝试:
csv_chunks = [chunk[(chunk["B"] + chunk["A"]).isin(acids.tolist())]
for chunk in csv_chunks]
df = pandas.concat(csv_chunks)
代码
for chunk in csv_chunks:
chunk = chunk[(chunk["B"] + chunk["A"]).isin(acids.tolist())]
可能没有按照您的意图进行。在 for 循环 的每次迭代中,for chunk in csv_chunks 将 csv_chunks 中的一个项目分配给 chunk。然后,
chunk = chunk[(chunk["B"] + chunk["A"]).isin(acids.tolist())]
立即重新分配一个新值给 block 。很好,但这不会更改 csv_chunks 中的项目。您只是在摆弄一些自变量 chunk 中的值。
要修改 csv_chunks 中的值,您可以使用列表理解来构建一个新列表,然后将其重新分配给变量 csv_chunks:
csv_chunks = [chunk[(chunk["B"] + chunk["A"]).isin(acids.tolist())]
for chunk in csv_chunks]
