使用多个分隔符将文本导入到pandas中。

23

我有一些数据看起来像这样:

c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.3

我想把它导入到一个3列数据框中,其中列名例如:

a , b, c
1,  1, 0.5
etc
我一直在尝试将数据分为两列,以':'为分隔符,并将第一列以' '为分隔符进行拆分。但我发现这很烦人。是否有更好的方法可以直接在导入时解决?
目前情况:
data1 = pd.read_csv(file_loc, skiprows = 3, delimiter = ':', names = ['AB', 'C'])
data2 = pd.DataFrame(data1.AB.str.split(' ',1).tolist(), names = ['A','B'])

然而,这一情况进一步复杂化了,因为我的数据开头有一个空格...

我觉得这应该是一个简单的任务,但目前我想着逐行读取并使用一些查找和替换方法来清理数据,然后再进行导入。

1个回答

42

一种方法是使用 Python 引擎允许的正则表达式分隔符。例如:

>>> !cat castle.dat
c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.3
>>> df = pd.read_csv('castle.dat', skiprows=3, names=['a', 'b', 'c'], 
                     sep=' |:', engine='python')
>>> df
   a  b    c
0  1  1  0.5
1  1  2  6.5
2  1  3  5.3

这正是我所需要的。谢谢。 - CastleH
现在我有点尴尬,之前没有注意到文档中的“sep”参数... :-/ - CastleH
2
当我使用这个方法时,为什么会出现“ParserError”? pandas.errors.ParserError:在第11行中期望29个字段,但看到了45个。错误可能是由于在使用多字符分隔符时忽略引号引起的。 - user77005
2
或者在单字符分隔符的情况下,使用字符类sep='[ :]' - Andras Deak -- Слава Україні
1
@user77005,sep 值是一个正则表达式字符串;请确保您始终将其放置在 '..'"...." 中。 - Sumax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接