当值有空格时,将空格分隔的文件转换为 Pandas

问题描述

我有一个空格分隔的文本文件。前 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)

这会将每个值写入一个新列。希望这会有所帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...