我有以下文件:
OBJ OBJ OBJ
DATE OBJ CLASS DATE OBJ OBJ OBJ
CLASS ENTERED1 TAG REPL ENTERED2 NAME TSTMP USERID
----- ---------- --- ----- ---------- ---------------------------------------- -------------------------- --------
EZ4 2002-02-06 D 2002-02-06 abc random 2002-02-06-10.05.30.242768 2342342
000 2001-09-27 D 2001-09-27 none 2001-09-27-10.23.31.121606 2343242
011 1974-07-09 0001-01-01 board COMPENSATON 1997-01-22-09.10.23.145853
列用下划线定义,标题文本分为多行。我想把它读成一个pandas数据帧,这样列文本就完整了,下划线就被删除了。我该怎么做才能以我正在寻找的格式获取数据帧?
答案 0 :(得分:2)
我将pd.read_fwf
用于固定宽度,但指定'\s{2,}'
g = lambda x: '' if x.startswith('Unnamed') else x
pd.read_fwf(
'file.txt',
sep='\s{2,}',
header=[0, 1, 2],
skiprows=[3]
).rename(columns=g)
OBJ OBJ
DATE OBJ CLASS DATE OBJ
CLASS ENTERED1 TAG REPL ENTERED2 NAME TSTMP USERID
0 EZ4 2002-02-06 D NaN 2002-02-06 abc random 2002-02-06-10.05.30.242768 2342342.0
1 000 2001-09-27 D NaN 2001-09-27 none 2001-09-27-10.23.31.121606 2343242.0
2 011 1974-07-09 NaN NaN 0001-01-01 board COMPENSATON 1997-01-22-09.10.23.145853 NaN
答案 1 :(得分:1)
看起来前两行和第三行是不必要的,因此请通过指定skiprows
属性跳过它们。
df = pd.read_csv('file.txt', skiprows=(0, 1, 3), sep='\s{2,}', engine='python')
答案 2 :(得分:0)
在到达下划线之前存储文本信息。当你到达下划线时,保存每个"列的开始和结束位置"然后返回并根据需要连接该文本。考虑写一个可重用的函数......总有一天你需要做这样的事情: - )