读取 pandas 数据框中的多个 csv 文件

问题描述 投票:0回答:1

我有一组像这样的文本文件:

ID对应的文件

A

<empty line>
#-----------------------------------------
#    foo  bar  baz  
#-----------------------------------------
    0.0120932       1.10166       1.08745 
    0.0127890       1.10105       1.08773 
    0.0142051       1.09941       1.08760 
    0.0162801       1.09662       1.08548 
    0.0197376       1.09170       1.08015 

ID对应的文件

B

<empty line>
#-----------------------------------------
#    foo  bar  baz  
#-----------------------------------------
    0.888085      0.768590      0.747961
    0.893782      0.781607      0.760417
    0.899830      0.797021      0.771219
    0.899266      0.799260      0.765859
    0.891489      0.781255      0.728892

等等

我想将它们全部读入

pandas
数据框,其列是
['ID', 'foo', 'bar', 'baz']
。通常,当我想逐行创建数据帧时,我将每一行作为字典读取并附加到列表,然后将字典列表转换为数据帧。然而,这个技巧在这里不起作用,因为每个字典都包含多个行。我该如何解决这个问题?

python pandas csv row
1个回答
0
投票

假设您的文件名为

A.csv
/
B.csv
,您可以使用自定义函数和
glob
。在函数中使用
pandas.read_csv
skiprows
(自定义分隔符)并提供预期的名称:

from glob import glob
from pathlib import Path

files = glob('*.csv')
# or from an explicit list:
# files = ['A.csv', 'B.csv']

def read_file(path, skip=4, names=['foo', 'bar', 'baz']):
    stem = Path(path).stem
    return (stem,
            pd.read_csv(path, skiprows=skip, sep=r'\s+',
                        names=names)
              .assign(ID=stem)[['ID']+names]
            )

dfs = dict(map(read_file, files))

输出:

{'A':   ID       foo      bar      baz
      0  A  0.012093  1.10166  1.08745
      1  A  0.012789  1.10105  1.08773
      2  A  0.014205  1.09941  1.08760
      3  A  0.016280  1.09662  1.08548
      4  A  0.019738  1.09170  1.08015,
 'B':   ID       foo       bar       baz
      0  B  0.888085  0.768590  0.747961
      1  B  0.893782  0.781607  0.760417
      2  B  0.899830  0.797021  0.771219
      3  B  0.899266  0.799260  0.765859
      4  B  0.891489  0.781255  0.728892}
© www.soinside.com 2019 - 2024. All rights reserved.