0

我正在读取一个 csv 文件,然后进行一些过滤:

csv_chunks = pandas.read_csv(filepath, sep = DELIMITER,skiprows = 2, chunksize = 1000, converters = {"A": str, "B": str})

csv_chunks_new = [chunk[(chunk["A"] + chunk["B"]).isin(acids.tolist())]
          for chunk in csv_chunks]

奇怪的是,当我现在尝试将 csv_chunks 转换为数据框时

df = pandas.concat(chunk for chunk in csv_chunks)

我收到以下错误:

Exception: All objects passed were None

因此,尽管我将过滤后的结果重新分配给一个新对象(csv_chunks_new),但它似乎也改变了 csv_chunks。任何想法可能会发生什么?

谢谢,安妮

4

1 回答 1

1

csv_chunks不是一个列表,它本身就是一个迭代器。通过循环遍历所有元素,您已经用尽了该迭代器。当你再次循环它时它不再返回元素,并且pandas.concat()因为它传递了一个空序列而抱怨。

只需重新创建对象:

csv_chunks = pandas.read_csv(filepath, sep = DELIMITER,skiprows = 2, chunksize = 1000, converters = {"A": str, "B": str})

它返回一个新的迭代器。

于 2013-07-16T12:55:46.330 回答