我有一個很大的csv文件,由於內存問題,我無法使用read_csv()加載到DataFrame中。然而,在csv的第一列中有一個{0,1}標誌,我只需要加載一個'1'的行,這個行很容易就足夠小以適應DataFrame。有什麼方法可以在條件下加載數據,或者在加載之前操作csv(類似於grep)?在加載到熊貓數據框之前從CSV中過濾出行
回答
您可以使用pd.read_csv
s的comment
參數,並將其設置爲'0'
import pandas as pd
from io import StringIO
txt = """col1,col2
1,a
0,b
1,c
0,d"""
pd.read_csv(StringIO(txt), comment='0')
col1 col2
0 1 a
1 1 c
您還可以使用chunksize
把pd.read_csv
成一個迭代器和處理它與query
和pd.concat
注:作爲OP指出,塊大小1
是不現實的。我僅用於演示目的。請增加它以適應個人需求。
pd.concat([df.query('col1 == 1') for df in pd.read_csv(StringIO(txt), chunksize=1)])
# Equivalent to and slower than... use the commented line for better performance
# pd.concat([df[df.col1 == 1] for df in pd.read_csv(StringIO(txt), chunksize=1)])
col1 col2
0 1 a
2 1 c
非常聰明!嘿,當然,但聰明! –
@ juanpa.arrivillaga你在說什麼,就像它打算用於:-) – piRSquared
我試圖推廣這個問題,但實際上我在文檔中間使用了一個字符串。註釋字段完全回答了我的問題,但受限於它只能在文件開頭的單個字符上使用。 concat解決方案完美地工作,雖然我增加了大塊 - 1太慢了。我還需要添加low_memory = False來解決一些data_type問題。 mdms = pd.concat([df.query('Pool ==「FX」')for df in pd.read_csv(mtms,chunksize = 1000,low_memory = False)]) – ibav
- 1. 在使用read_csv將數據下載到熊貓數據框之前,是否有預過濾數據的方法?
- 2. 過濾數據幀在熊貓上行
- 3. 熊貓數據框爲CSV
- 4. 熊貓數據框過濾對象列?
- 5. 過濾日期的熊貓數據框
- 6. 熊貓數據框的條件過濾
- 7. 如何將我的csv從google dataLab加載到熊貓數據框中?
- 8. 熊貓寫數據框列到csv
- 9. Python - 熊貓 - 寫數據框到CSV
- 10. 熊貓數據框到csv與類
- 11. 用熊貓過濾數據
- 12. 出口從熊貓數據框中
- 13. 熊貓追加過濾行到另一個數據幀
- 14. 基於groupby過濾熊貓數據框(只有前3)
- 15. 從熊貓數據框中
- 16. 從熊貓數據框中
- 17. 從熊貓數據框中
- 18. 從熊貓數據框中
- 19. 從python變量載入數據到熊貓數據框中
- 20. 將一個空格分隔的CSV加載到一個熊貓數據框中
- 21. 熊貓找不到csv文件加載
- 22. 加入熊貓數據框時出錯
- 23. 過濾在熊貓數據幀
- 24. 大熊貓數據框:過濾的行基於列
- 25. Python熊貓數據框:圍繞關鍵日期進行過濾
- 26. 使用熊貓數據框將數據集加載到python
- 27. 將網絡數據文件加載到熊貓數據框
- 28. 在熊貓中添加數據框
- 29. Csv與熊貓數據框缺失列
- 30. 從熊貓數據框索引中過濾包含字符串模式的行
您可以輕鬆地在該列上過濾新的csv,否? –