在读取csv文件时向数据框中添加列 [pandas]

3
我正在读取多个csv文件,并将它们合并成一个数据框,如下所示:
pd.concat([pd.read_csv(f, encoding='latin-1') for f in glob.glob('*.csv')],
         ignore_index=False, sort=False)

问题:

我想在将所有csv文件连接到数据框时,根据每个csv文件的文件名添加一个在任何csv中都不存在的列。非常感谢您的帮助。

2个回答

6

glob.glob 返回普通字符串,因此您可以在循环中为每个单独的数据框添加列。

假设您的目录中有df1.csv和df2.csv文件:

import glob
import pandas as pd

files = glob.glob('df*csv')
dfs = []
for file in files:
    df = pd.read_csv(file)
    df['filename'] = file
    dfs.append(df)
df = pd.concat(dfs, ignore_index=True)
df

    a   b   filename
0   1   2   df1.csv
1   3   4   df1.csv
2   5   6   df2.csv
3   7   8   df2.csv

1

我本地目录中有多个csv文件。每个文件名都包含一些数字。其中的一些数字标识了文件所代表的年份。在我拼接这些文件时,我需要给每个文件添加一个名为year的列,并且在这个过程中,我想要从文件名中获取年份信息并将其插入到该列中。我使用regex来提取年份并进行合并,如20+11=2011。然后,我将该列的数据类型设置为int32

pd.concat(
    [
        pd.read_csv(f)
            .assign(year = '20' + re.search('[a-z]+(?P<year>[0-9]{2})', f).group('year'))
            .astype({'year' : 'int32'})
        for f in glob.glob('stateoutflow*[0-9].csv')
    ],
    ignore_index = True
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接