2017-02-17 47 views

回答

2

我认为你需要的DataFrames名单concat与DF名称参数keys,然后取出MultiIndex,并创建新的列File

dfs = [df1,df2, df3] 
df = pd.concat(dfs, keys=range(1, len(dfs) + 1)) 
     .reset_index(level=1, drop=True) 
     .rename_axis('File') 
     .reset_index() 

样品:

df1 = pd.DataFrame({'Product':['a','b','c'], 
        'Price':[4,5,6]}) 

print (df1) 

    Price Product 
0  4  a 
1  5  b 
2  6  c 

df2 = pd.DataFrame({'Product':['d','e','g'], 
        'Price':[9,8,7]}) 

print (df2) 
    Price Product 
0  9  d 
1  8  e 
2  7  g 

df3 = pd.DataFrame({'Product':['f','z','h'], 
        'Price':[1,2,4]}) 

print (df3) 
    Price Product 
0  1  f 
1  2  z 
2  4  h 
dfs = [df1,df2, df3] 
df = pd.concat(dfs, keys=range(1, len(dfs) + 1)) \ 
     .reset_index(level=1, drop=True) \ 
     .rename_axis('File').reset_index() 
print (df) 
    File Price Product 
0  1  4  a 
1  1  5  b 
2  1  6  c 
3  2  9  d 
4  2  8  e 
5  2  7  g 
6  3  1  f 
7  3  2  z 
8  3  4  h 

您也可以使用中的自定义名称210:

dfs = [df1,df2,df3] 
names = ['file1','file2','file3'] 

df = pd.concat(dfs, keys=names) 
df = df.reset_index(level=1, drop=True).rename_axis('File').reset_index() 
print (df) 
    File Price Product 
0 file1  4  a 
1 file1  5  b 
2 file1  6  c 
3 file2  9  d 
4 file2  8  e 
5 file2  7  g 
6 file3  1  f 
7 file3  2  z 
8 file3  4  h 
+0

太棒了!请让我再问一个问题。我的文件夹中有很多.txt文件。通过执行“dfs = [df1,df2,df3,df4,df5 .....]来连接这些文件不是一个好主意。有什么办法连接所有文件而不是这个吗? –

+0

是什么让它不是一个好主意? –

+0

例如,我在我的文件夹中有1000个.txt文件,如果我通过执行df1,df2,df3,...来结合这些.txt文件,它将需要永久.... –