问题描述
我有一个空格分隔的文本文件。前 3 列在值中包含空格,但它们具有固定宽度(7 个字符)。
示例:
A123456 B123456 C123456 12 158 325 0 14
D123456 E123456 F123456 1 147 23 711 0
G1 3456 H123456 F 23456 158 11 7 574 12589
J1234 6 K 456 L123456 1458 2 0.45 1 78
期望的输出:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
0 | A123456 | B123456 | C123456 | 12 | 158 | 325 | 0 |
1 | D123456 | E123456 | F123456 | 1 | 147 | 23 | 711 |
2 | G1 3456 | H123456 | F 23456 | 158 | 11 | 7 | 574 |
3 | J1234 6 | K 456 | L123456 | 1458 | 2 | 0.45 | 1 |
我可以用 pandas 读取这个文件吗?
解决方法
我们可以使用 pd.read_fwf
来“将固定宽度格式化行的表格读入 DataFrame”
df = pd.read_fwf('data.txt',colspecs='infer',header=None)
df
:
0 1 2 3
0 A123456 B123456 C123456 12 158 325 0 14
1 D123456 E123456 F123456 1 147 23 711 0
2 G1 3456 H123456 F 23456 158 11 7 574 12589
3 J1234 6 K 456 L123456 1458 2 0.45 1 78
如果框架的其余部分要以空格分隔,则列 3
可以在空格上为 str.split
:
df = pd.read_fwf('data.txt',header=None)
# Replace 3 with new columns
df = df.drop(3,axis=1).join(df[3].str.split(expand=True),rsuffix='_x')
# Rename columns
df.columns = range(len(df.columns))
df
:
0 1 2 3 4 5 6 7
0 A123456 B123456 C123456 12 158 325 0 14
1 D123456 E123456 F123456 1 147 23 711 0
2 G1 3456 H123456 F 23456 158 11 7 574 12589
3 J1234 6 K 456 L123456 1458 2 0.45 1 78
data.txt
:
A123456 B123456 C123456 12 158 325 0 14
D123456 E123456 F123456 1 147 23 711 0
G1 3456 H123456 F 23456 158 11 7 574 12589
J1234 6 K 456 L123456 1458 2 0.45 1 78
,
您可以使用以下任何一种:-
data = pd.read_csv('data.txt',sep=";|:|,",header=None,engine='python')
或使用 read_fwf
df = pd.read_fwf('data.txt',header=None)
这会将每个值写入一个新列。希望这会有所帮助。