[英]How to read txt file in Pandas: Error tokenizing data
问题:我用pandas.read_csv读取txt文件,但是有一些错误。 流程如下图:
import pandas as pd
txt 文件的路径: './Data/fold2_l25431/test.txt'
例子test.txt的内容:(txt的前三行,读入的时候,想分成三列,'1','2','3'在一列,'persona'在一列, 以及一栏中冒号后的句子)
First line: 1 persona: i am adorkable.
Second line: 2 persona: i am book dumb.
Third line: 3 persona: i am token evil teammate.
代码: pd.read_csv('./Data/fold2_l25431/test.txt')
或pd.read_csv('./Data/fold2_l25431/test.txt', sep=" ")
ParserError: Error tokenizing data. C error: Expected 8 fields in line 6, saw 9
尝试这个:
import pandas as pd
pd.read_csv( 'test.txt',header=None ,on_bad_lines='skip')
我无法重现您的错误。
一般建议:
sep=":"
和换行符l.neterminator="\n"
on_bad_lines="skip"
并检查您的 output错误的原因是 SPACE (sep = " ")
。 使用其他东西(如,
或|
来分隔字段。用逗号更新的表看起来像这样
1, persona:, i am adorkable.
2, persona:, i am book dumb.
3, persona:, i am token evil teammate.
4, persona:, i am never my fault.
5, persona:, i am honor before reason.
6, persona:, i am jerk with a heart of gold.
7, persona:, i am no social skills.
8, persona:, i am bad liar
.. 应该使用此命令pd.read_csv('test1.txt', sep = ",", header = None)
output 将是
0 1 2
1 persona: i am adorkable.
2 persona: i am book dumb.
3 persona: i am token evil teammate.
4 persona: i am never my fault.
5 persona: i am honor before reason.
6 persona: i am jerk with a heart of gold.
7 persona: i am no social skills.
8 persona: i am bad liar
您的文件不是 csv,因此您可能必须自己编写 function 才能读取它并拆分为列
我使用io
只是为了模拟 memory 中的文件 - 所以每个人都可以复制和测试它 - 但你应该使用open()
text = '''1 persona: i am adorkable.
2 persona: i am book dumb.
3 persona: i am token evil teammate.
4 persona: i am never my fault.
5 persona: i am honor before reason.
6 persona: i am jerk with a heart of gold.
7 persona: i am no social skills.
8 persona: i am bad liar'''
import io
#f = open('./Data/fold2_l25431/test.txt')
f = io.StringIO(text)
rows = []
for line in f:
line = line.strip() # remove '\n'
first, rest = line.split(' ', 1) # split only on first space
second, third = rest.split(': ') # split on ": "
rows.append( [first, second, third] )
print(rows)
结果:
[
['1', 'persona', 'i am adorkable.'],
['2', 'persona', 'i am book dumb.'],
['3', 'persona', 'i am token evil teammate.'],
['4', 'persona', 'i am never my fault.'],
['5', 'persona', 'i am honor before reason.'],
['6', 'persona', 'i am jerk with a heart of gold.'],
['7', 'persona', 'i am no social skills.'],
['8', 'persona', 'i am bad liar']
]
稍后您可以将此列表转换为DataFrame
import pandas as pd
df = pd.DataFrame(rows, columns=['1', '2', '3'])
print(df)
结果:
1 2 3
0 1 persona i am adorkable.
1 2 persona i am book dumb.
2 3 persona i am token evil teammate.
3 4 persona i am never my fault.
4 5 persona i am honor before reason.
5 6 persona i am jerk with a heart of gold.
6 7 persona i am no social skills.
7 8 persona i am bad liar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.