使用多个分隔符将文本导入pandas
我有一些数据,看起来像这样:
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