我正在读取多个csv文件,并将它们组合为一个数据帧,如下所示:
pd.concat([pd.read_csv(f, encoding='latin-1') for f in glob.glob('*.csv')],
ignore_index=False, sort=False)
问题:
我想基于要连接到数据框的每个csv文件的csv文件名,在任何csv中(到数据框)添加一个不存在的列。任何帮助将不胜感激。
答案 0 :(得分:1)
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 :(得分:0)
我的本地目录中有多个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
)