columnA;columnB;columnC;columnD
2022040200000000000000000000011 8000702 79005889 SPECIAL_AGENCY
您可以观察到列的名称由半列 ;
分隔,但是行值具有不同的分隔符。在此示例中,
columnA
有 3 个空格,
columnB
有 3 个空格,
columnC
有 2 个空格,
columnD
有 7 个空格。需要澄清的是,我需要保留空格,因此“真正的”分隔符是最后一个空格。
考虑到我有一个模式,它告诉我每列的空格量(分隔符?)是多少,如何将其转换为 pandas 数据框?
|
) 和
pandas.read_csv
的双 regex分隔符:
df = pd.read_csv("/tmp/file.txt", sep=";|(?<=\d)\s+(?=\B)", engine="python")
输出:
print(df)
columnA columnB columnC columnD
0 2022040200000000000000000000011 8000702 79005889 SPECIAL_AGENCY LONDON
注意:如果需要,您可以添加 来清理 \s
中多余的 (
columnD
)。
In [17]: data = Path("data.txt").read_text().splitlines()
In [18]: hdr = data[0].split(";")
In [19]: df = pd.DataFrame([row.split() for row in data[1:]], columns=hdr)
In [20]: df
Out[20]:
columnA columnB columnC columnD
0 2022040200000000000000000000011 8000702 79005889 SPECIAL_AGENCY