2014-11-05 95 views
0

我想使用熊貓將許多(幾千列tsv文件)數據幀合併到一個csv文件中。我是熊貓新手(和python),可以使用一些輸入或方向。使用熊貓合併大量數據幀的最佳策略

我的數據框是從網上抓取的列表中的觀測數據,不包含標題。例如:

數據幀1:

bluebird 34 
chickadee 168 
eagle  10 
hawk  67 
sparrow  2 

數據幀2:

albatross 56 
bluebird  78 
hawk   3 
pelican  19 
sparrow  178 

我希望做的是簡單地創建一個主文件的所有個人意見:

albatross  0  56 
bluebird  34 78 
chickadee  168 0 
eagle   10 0 
hawk   67 3 
pelican  0  19 
sparrow  2  178 

我試圖合併使用熊貓一次的數據幀:

import pandas as pd 

df1 = pd.read_table("~/home/birds1.tsv", sep='\t') 
df2 = pd.read_table("~/home/birds2.tsv", sep='\t') 
merged = df1.merge(df1, df2, how="left").fillna("0") 
merged.to_csv("merged.csv", index=False) 

但我只收到一列。我沒有「鳥」的主列表,但是如果需要的話,我可以連接所有的數據並對字典列表的唯一名稱進行排序。

我的策略是合併幾千個文件?

+0

索引和列的名稱是什麼? – 2014-11-05 21:06:14

+0

提供給我的數據框沒有索引或列名。我想我可以將它們添加到現有數據中,但這會增加一個步驟 - 很容易在命令行中進行。感謝西蒙! – 2014-11-14 18:33:28

回答

1

我認爲最快的方法是設置要合併到索引中的列,創建它們是數據框的列表,然後是pd.concat。類似這樣的:

import os 
import pandas as pd 
directory = os.path.expanduser('~/home') 
files = os.path.listdir(directory) 
dfs = [] 
for filename in files: 
    if '.tsv' in file: 
     df = pd.read_table(os.path.join(directory,filename),sep='\t').set_index('bird') 
     dfs.append(df) 
master_df = pd.concat(dfs,axis=1) 
1

查看merge的文檔,從框架調用時,第一個參數是'其他'框架,第二個參數是您要合併的變量(實際上不確定當您傳遞DataFrame時會發生什麼) 。

但是,假設你的鳥列被稱爲「鳥」,你可能想要的是:

In [412]: df1.merge(df2, on='bird', how='outer').fillna(0) 
Out[412]: 
     bird value_x value_y 
0 bluebird  34  78 
1 chickadee  168  0 
2  eagle  10  0 
3  hawk  67  3 
4 sparrow  2  178 
5 albatross  0  56 
6 pelican  0  19