【发布时间】:2019-07-14 10:56:07
【问题描述】:
我正在使用 Pandas 读取文本文件并使用 read_csv 修剪数据。我想通过在满足某个字符串值时停止 csv_read 来加速程序,但是在处理块时我似乎无法做到这一点。我的数据遵循这样的常规模式:
v 2298995.721525 14888281.709655 4538.717779 0.015686 0.035294 0.019608
v 2298996.930769 14888284.103022 4538.596748 0.023529 0.031373 0.027451
v 2299001.331951 14888295.376948 4538.696330 0.027451 0.043137 0.031373
... (about 4.5 million lines of this)
f 155739//155739 157296//157296 156114//156114
f 157296//157296 160780//160780 156113//156113
f 159990//159990 157296//157296 155739//155739
... (about 10 million lines of this)
我可以读取和输出数据,但是如果我在 read_csv 检测到第一列中的“f”字符串时停止它会节省大量的处理时间。这是我当前的代码:
import pandas as pd
import sys
#assign names to columns
colnames = ['ID', 'X', 'Y', 'Z']
#assign chunk size
c_size=200000
#read input file with space separated columns, strip header, and strip extra columns
for obj_chunk in pd.read_csv(sys.argv[1],sep='\s+', header=3, usecols=[0,1,2,3],chunksize=c_size, ):
dtype={'ID':str,'X':int, 'Y':int, 'Z':int}
obj_chunk.columns = colnames
obj_chunk = obj_chunk[~obj_chunk.ID.str.contains('f')]
obj_chunk.to_csv(sys.argv[2], index=False, header=None, columns = ['X','Y','Z'], mode = 'a')
我尝试了一些“if”然后“break”语句,但我认为我没有走在正确的轨道上:
if obj_chunk[obj_chunk.ID.str.contains('f').any]: break
感谢您的帮助!
【问题讨论】:
-
我试过你的说法,但我不断收到 KeyErrors: True or False 取决于我使用的字符串表达式。我可能没有把它放在正确的位置?谢谢!
标签: python pandas python-2.7 csv