list iteration将原始列表更改为None

时间:2013-07-16 12:54:28

标签: python csv file-io pandas

我正在阅读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。有什么想法可能会发生什么?

谢谢, 安

1 个答案:

答案 0 :(得分:1)

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

只需重新创建对象:

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

返回一个新的迭代器。