【发布时间】:2017-02-09 10:39:00
【问题描述】:
在 pandas read_csv 中,有没有办法指定例如。 col1、col15、整行?
我正在尝试从一个文本文件中导入大约 700000 行数据,该文本文件以“^”作为分隔符,没有文本限定符和回车作为行分隔符。
从文本文件中,我需要第 1 列、第 15 列,然后是表格/数据框的三列中的整行。
我已经搜索了如何在 pandas 中执行此操作,但不太了解它以获取逻辑。我可以很好地导入所有 26 列,但这对我的问题没有帮助。
my_df = pd.read_csv("tablefile.txt", sep="^", lineterminator="\r", low_memory=False)
或者我可以使用标准 python 将数据放入表中,但这需要大约 4 小时才能处理 700000 行。这对我来说太长了。
count_1 = 0
for line in open('tablefile.txt'):
if count_1 > 70:
break
else:
col1id = re.findall('^(\d+)\^', line)
col15id = re.findall('^.*\^.*\^(\d+)\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*', line)
line = line.strip()
count_1 = count_1 + 1
cur.execute('''INSERT INTO mytable (mycol1id, mycol15id, wholeline) VALUES (?, ?, ?)''',
(col1id[0], col15id[0], line, ) )
conn.commit()
print('row count_1=',count_1)
在 pandas read_csv 中,有没有办法指定例如。 col1、col15、整行?
如上,col1 和 col15 是数字,wholeline 是字符串
- 我不想在导入后重建字符串,因为我可能会在此过程中丢失一些字符。
谢谢
编辑: 为每一行提交数据库非常耗时。
【问题讨论】:
-
仅使用 python 时,您应该在循环外编译一次正则表达式。这必须加快速度
-
我不明白这是如何工作的,我认为 re.findall(regex, object) 需要在调用 re.findall 之前创建对象。你有例子吗?