2

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())]

チャンクを連結すると

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

空のチャンクがいくつかありますが、空でないチャンクもあるため、どのオブジェクトが None と見なされるかはわかりません。どんな考えでも大歓迎です!

ありがとう、アン

4

1 に答える 1

1

試す:

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-loopfor chunk in csv_chunks割り当てます。それで、csv_chunkschunk

chunk = chunk[(chunk["B"] + chunk["A"]).isin(acids.tolist())]

はすぐに新しい値をに再割り当てchunkします。わかりましたが、これは のアイテムを変更しませんcsv_chunks。独立変数 の値をいじっているだけですchunk

の値を変更するにはcsv_chunks、リスト内包表記を使用して新しいリストを作成し、それを変数に再割り当てcsv_chunksします。

csv_chunks = [chunk[(chunk["B"] + chunk["A"]).isin(acids.tolist())]
              for chunk in csv_chunks]
于 2013-07-12T16:57:21.023 に答える