gpt4 book ai didi

python - 合并文件夹中的每个数据框

转载 作者:行者123 更新时间:2023-12-01 03:48:02 25 4
gpt4 key购买 nike

我在多个文件夹中有 .csv 文件,如下所示:

文件1

Count    2002_Crop_1   2002_Crop_2   Ecoregion
20 Corn Soy 46
15 Barley Oats 46

文件2

Count   2003_Crop_1    2003_Crop_2  Ecoregion
24 Corn Soy 46
18 Barley Oats 46

对于每个文件夹,我想合并其中的所有文件。

我想要的输出是这样的:

Crop_1  Crop_2 2002_Count  2003_Count  Ecoregion
Corn Soy 20 24 46
Barley Oats 15 18 46

实际上,每个文件夹中有 10 个文件,而不仅仅是 2 个,需要合并。

我现在正在使用此代码:

import pandas as pd, os
#pathway to all the folders
folders=r'G:\Stefano\CDL_Trajectory\combined_eco_folders'
for folder in os.listdir(folders):
for f in os.listdir(os.path.join(folders,folder)):
dfs=pd.read_csv(os.path.join(folders,folder,f)) #turn each file from each folder into a dataframe
df = reduce(lambda left,right: pd.merge(left,right,on=[dfs[dfs.columns[1]], dfs[dfs.columns[2]]],how='outer'),dfs) #merge all the dataframes based on column location

但这会返回:
类型错误:字符串索引必须是整数,而不是系列

最佳答案

  • 使用glob.globtraverse a directory at a fixed depth .

  • 如果可以的话,尽量避免重复调用 pd.merge。每次调用 pd.merge 都会创建一个新的 DataFrame。因此,每个中间结果中的所有数据都必须复制到新的 DataFrame 中。循环执行此操作会导致 quadratic copying ,这对性能不利。

  • 例如,如果您进行一些列名争论来更改,

    ['Count', '2002_Crop_1', '2002_Crop_2', 'Ecoregion']

    ['2002_Count', 'Crop_1', 'Crop_2', 'Ecoregion']

    然后您可以使用['Crop_1', 'Crop_2', 'Ecoregion']作为每个DataFrame的索引,并通过一次调用将所有DataFrame组合起来 pd.concat.

<小时/>
import pandas as pd
import glob

folders=r'G:\Stefano\CDL_Trajectory\combined_eco_folders'
dfs = []

for filename in glob.glob(os.path.join(folders, *['*']*2)):
df = pd.read_csv(filename, sep='\s+')
columns = [col.split('_', 1) for col in df.columns]

prefix = next(col[0] for col in columns if len(col) > 1)
columns = [col[1] if len(col) > 1 else col[0] for col in columns]
df.columns = columns

df = df.set_index([col for col in df.columns if col != 'Count'])
df = df.rename(columns={'Count':'{}_Count'.format(prefix)})

dfs.append(df)

result = pd.concat(dfs, axis=1)
result = result.sortlevel(axis=1)
result = result.reset_index()
print(result)

产量

   Crop_1 Crop_2  Ecoregion  2002_Count  2003_Count
0 Corn Soy 46 20 24
1 Barley Oats 46 15 18

关于python - 合并文件夹中的每个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38678520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com