csv python:将txt文件读入panda,其中数据由随机数的空格分隔

ff29svar  于 2022-12-06  发布在  Python
关注(0)|答案(4)|浏览(202)

我必须将一个txt文件加载到panda中,它看起来像这样:

20221001T000022649  sdff002     0011   $LNKD       word1 word2 word3
20221001T000022733  SDSD002     0011     SD8      word1 word2 word3 word4
20221001T000022758     SDSD002   0011     NLP     word1 word2 word3 word1word2 word3
20221001T000022808  SDSD002   0011     JKT   word1 word2 word3 word1 word2 
20221001T000022823      SDSD002   0011   SD8     word1 word2 word3

我心里想着:

mydf = pd.read_csv("test_query.txt", sep = "   ")

假设单词由一个空格分隔,而其他记录由多个空格分隔。最后一个单词word 1 word 2 etc应该都放在一列中。这是不起作用的,因为空格是随机的,会给出几个空列。
可以肯定的是,前4个记录中没有空间,即20221001 T000022649 sdff 002 0011 $LNKD

那么你会如何解决这个问题呢?一行一行地解析吗?
谢谢

oewdyzsn

oewdyzsn1#

老实说,我会确保你使用pd.read_csv函数来阅读csv文件,所以你可以写一个程序把你的.txt文件转换成csv文件,然后再运行一次,或者从csv文件开始。
希望这对你有帮助。

ygya80vv

ygya80vv2#

可以使用正则表达式作为分隔符

pd.read_csv("test_query.txt", sep = '\s+')
41zrol4v

41zrol4v3#

修改

>>> import re
>>> import pandas as pd
>>>
>>> rows = []
>>> for line in data.split("\n"):
>>>     chunks = re.split(' +', line)
>>>     rows.append(chunks[:4] + [','.join(chunks[4:])])
>>>
>>> df = pd.DataFrame(rows)
>>>
>>> print(df)
                    0        1     2      3                                   4
0  20221001T000022649  sdff002  0011  $LNKD                   word1,word2,word3
1  20221001T000022733  SDSD002  0011    SD8             word1,word2,word3,word4
2  20221001T000022758  SDSD002  0011    NLP  word1,word2,word3,word1word2,word3
3  20221001T000022808  SDSD002  0011    JKT      word1,word2,word3,word1,word2,
4  20221001T000022823  SDSD002  0011    SD8                   word1,word2,word3
gzjq41n4

gzjq41n44#

另一个可能的解决方案是使用engine='python'强制使用至少2个空格作为分隔符(sep='\s{2,}'):

df = pd.read_csv("test_query.txt", sep='\s{2,}', engine='python', header=None)

输出量:

0        1   2      3                                   4
0  20221001T000022649  sdff002  11  $LNKD                   word1 word2 word3
1  20221001T000022733  SDSD002  11    SD8             word1 word2 word3 word4
2  20221001T000022758  SDSD002  11    NLP  word1 word2 word3 word1word2 word3
3  20221001T000022808  SDSD002  11    JKT       word1 word2 word3 word1 word2
4  20221001T000022823  SDSD002  11    SD8                   word1 word2 word3

相关问题