Skip to main content
 首页 » 编程设计

python之连接 pandas 数据帧之传递的所有对象都是 None

2025年05月04日9mfrbuaa

我正在尝试分块读取和过滤 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]