pandas dataframe读取csv,指定列同时保留整行为字符串

2024-10-01 02:25:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在pandas read_csv中,是否有方法指定col1、col15、wholeline?

我试图从一个文本文件中导入大约700000行数据,该文件有hats'^'作为分隔符,没有文本限定符和回车符作为行分隔符。在

从文本文件中,我需要第1列、第15列,然后是一个表/数据帧的三列中的整行。在

我在熊猫身上研究过如何做到这一点,但不太了解这一点。我可以为所有26列导入fine,但这并不能解决我的问题。在

my_df = pd.read_csv("tablefile.txt", sep="^", lineterminator="\r",  low_memory=False)

或者我可以使用标准python将数据放入一个表中,但是对于700000行,这大约需要4个小时。对我来说太长了。在

^{pr2}$

在pandas read_csv中,是否有方法指定col1、col15、wholeline?

如上所述,col1和{}是数字,wholeline是字符串

  • 我不想在导入后重建字符串,因为我可能会在导入过程中丢失一些字符。在

谢谢

编辑: 提交到数据库中的每一行都非常耗时。在


Tags: 文件csv数据方法字符串文本pandasread
3条回答

我将conn.commit()放在for循环的外部。它将加载时间缩短到几分钟,尽管我猜它不太安全。在

不管怎样,谢谢你的帮助。在

使用某种准分隔符将整行作为一个df读入(在im下面使用&;),然后使用usecols再次读取,并指定cols 1和15的索引并将它们相加。在

my_df_full = pd.read_csv("tablefile.txt", sep="&", lineterminator="\r", low_memory=False)
my_df_full.columns = ['full_line']

my_df_cols = pd.read_csv("tablefile.txt", sep="^", lineterminator="\r", low_memory=False, usecols=[1,15])

my_df_full[['col1', 'col15']] = my_df_cols

首先,可以编译正则表达式以避免对每一行进行解析

import re

reCol1id = re.compile('^(\d+)\^')
reCol15id = re.compile('^.*\^.*\^(\d+)\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*\^.*')

count_1 = 0
for line in open('tablefile.txt'):
    if count_1 > 70:
        break
    else:
        col1id = reCol1id.findall(line)[0]
        col15id = reCol15id.findall(line)[0]
        line = line.strip()

        count_1 += 1

        cur.execute('''INSERT INTO mytable (mycol1id, mycol15id, wholeline) VALUES (?, ?, ?)''', 
        (col1id, col15id, line, ) )

        conn.commit()
    print('row count_1=',count_1)

相关问题 更多 >