2017-01-20 126 views
1

因此,我嘗試尋找許多文章,解釋如何合併或連接,連接等工作的大熊貓在python,或只是一般的r。當我用我的數據進行測試時,似乎沒有任何工作需要。我將發佈帶有任意數字和標題的示例數據,這些數據和標題具有我的數據特徵,以及我希望它在最終產品中的外觀。我通常嘗試使用Genus作爲我的公共列,因爲該列具有最常見的信息,而所有其他列都是描述該列的信息。這些是文本文件。合併具有相同標題的列沒有重複的列

數據幀1:

Genus Data Facts Info 
Dog 1 2 N/A 
Cat 3 1 N/A 
Elephant N/A 3 3 
Pig N/A N/A N/A 
Mouse N/A N/A N/A 

數據幀2:

Genus Info Stats 
Dog 2 3 
Cat 1 2 
Elephant N/A 1 
Pig N/A N/A 
Mouse N/A N/A 
Bird N/A N/A 

期望的結果:

Genus Data Facts Info Stats 
Dog 1 2 2 3 
Cat 3 1 1 2 
Elephant N/A 3 3 1 
Pig N/A N/A N/A N/A 
Mouse N/A N/A N/A N/A 
Bird N/A N/A N/A N/A 

有什麼辦法來創建一個使用Python或R此結果?我對python和r很陌生,並不知道所有的細節,所以我可能會錯過某些東西或者沒有用正確的術語進行搜索,但我現在一直在嘗試大約3周的時間閱讀其他人爲類似的情況做了些什麼,並試圖從中解脫出來。我無法使用Excel,因爲它會自動將某些數字輸入更改爲日期,並執行其他小的更改,如果有人試圖重做它,他們可能不會意識到修復這些細微差別。

回答

3

這裏是你如何能做到這一點與在python大熊貓:

import pandas as pd 
import numpy as np 

df1 = pd.DataFrame(np.random.randn(3,4), columns=['a','b','c','d'] 
df2 = pd.DataFrame(np.random.randn(3,2), columns=['e','f']) 

pd.concat([df1, df2], axis=1) 
#   a   b   c   d   e   f 
# 0 -1.181554 0.918146 0.547498 -0.409452 -1.852066 -0.377525 
# 1 0.508757 0.219863 1.945935 1.285512 -0.076156 0.172197 
# 2 -0.186153 -1.784728 -0.200416 1.873692 2.097818 0.575256 

(麥金尼,Python的數據分析,第186)。

編輯:

哎呀,我注意到你在兩個數據框中都有一個Info列。我認爲這將更好地工作,在這種情況下:

df1.combine_first(df2) 

你可以認爲它是「打補丁」失蹤調用對象與傳遞對象數據(麥金尼)數據

編輯:

從麥金尼另一句名言,P177提供

pandas.mergeç onnects基於一個或多個鍵DataFrames的行[類似於數據庫聯接]

pandas.concat膠或沿軸線

combine_first使拼接一起重疊的數據填補缺失值在一個對象與從值堆疊對象一起另一個

+0

哦,所以在第是「情況」,「修補」是從df2中獲取信息並填充df1中的空間,同時仍然保留df2中不同的列和行? – dlevy987

+0

太棒了!這真的很簡單嗎?我沒有在任何地方見過這個「df1.combine_first()」,我只見過.merge,.join和.concat,條件如通過= outer或一些其他複雜的東西,這些東西對我沒有意義新手自我。我非常欣賞這一點。它是否是numpy的一部分?因爲這可能是我以前從未見過的原因。這應該適用於更大的表格,更正嗎? – dlevy987

+0

許多熊貓的東西都是在numpy特徵之後設計的。所以numpy Series和pandas DataFrame都提供了combine_first()方法。我在上面引入numpy的唯一原因是快速創建一些隨機數據框。我將從McKinney的文本中添加一個編輯,解釋組合和合並的選項。很高興這有助於。 –

2
cols_to_use = df2.columns.difference(df1.columns) # removes all duplicates 
cols_to_use=cols_to_use.union(['Genus']) #since we need Genus for joining df's keep that one 

df3=pd.merge(df1,df2[cols_to_use],on='Genus') 

輸出

 Genus Info Stats Data Facts 
0  Dog 2.0 3.0 1.0 2.0 
1  Cat 1.0 2.0 3.0 1.0 
2 Elephant NaN 1.0 NaN 3.0 
3  Pig NaN NaN NaN NaN 
4  Mouse NaN NaN NaN NaN 
+0

我不想在我的最終產品中出現重複的列,但謝謝。 – dlevy987

+0

刪除重複的列 – Shijo

+0

有趣,但我假設會採取手動輸入每個列標題?這需要很長時間,因爲在某些情況下我的文件有70列以上。非常感謝您的寶貴時間!這可能適用於我的其他一些小型的:) – dlevy987

相關問題