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

23 投票
1 回答
61314 浏览
提问于 2025-04-29 11:54

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

c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.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

撰写回答