Pandas/Python 读取具有不同分隔符的文件

问题描述 投票:0回答:2
我有一个.txt文件,如下:

columnA;columnB;columnC;columnD 2022040200000000000000000000011 8000702 79005889 SPECIAL_AGENCY
您可以观察到列的名称由半列 

;

 分隔,但是行值具有不同的分隔符。在此示例中,
columnA
 有 3 个空格,
columnB
 有 3 个空格,
columnC
 有 2 个空格,
columnD
 有 7 个空格。

需要澄清的是,我需要保留空格,因此“真正的”分隔符是最后一个空格。

考虑到我有一个模式,它告诉我每列的空格量(分隔符?)是多少,如何将其转换为 pandas 数据框?

python pandas dataframe text-files
2个回答
4
投票
一种方法是使用带有 (

|) 和

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
注意:如果需要,您可以添加 

pandas.Series.replace

 来清理 \s
 中多余的 (
columnD
)。


4
投票
以下内容应该可以工作,但是它的缺点是在创建数据帧之前首先将整个文件读入内存。如果您的文件很大,这可能会造成问题。

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
    
© www.soinside.com 2019 - 2024. All rights reserved.