[英]Merging two pandas data frames in python using outer merge not identifying identical values
我正在嘗試使用一個公共列來合並兩個 Pandas 數據框(我從 csv 文件中導入了兩個數據框)。 公共列(鍵列)應該有一些相同的值,但大多數是不同的,所以我使用了外部合並。 執行合並后,我意識到我的輸出實際上只是將數據幀 2 添加到數據幀 1,而實際上沒有將關鍵列中的相同值合並到一行中。
例子:
import pandas as pd
#read csv files as dataframes
df1 = pd.read_table("genelist1.csv", sep=",")
df2 = pd.read_table("genelist2.csv", sep=",")
#print first 4 rows df1
df1[:4]
gene_id FC_1 p_1
name1 2 0.05
name2 3 0.01
name3 8 0.02
#print first 4 rows df2
df2[:4]
gene_id FC_2 p_2
name1 8 0.03
name2 3 0.01
name4 8 0.02
#Use outer merge to merge the two data frames using gene_id as key
df_merged = pd.merge(df1, df2, how='outer', on=['gene_id'])
我想要:
df_merged
gene_id FC_1 p_1 FC_2 p_2
name1 2 0.05 8 0.03
name2 3 0.01 3 0.01
name3 8 0.02 nan nan
name4 nan nan 8 0.02
但我實際上得到:
df_merged
gene_id FC_1 p_1 FC_2 p_2
name1 2 0.05 nan nan
name2 3 0.01 nan nan
name3 8 0.02 nan nan
name1 nan nan 8 0.03
name2 nan nan 3 0.01
name4 nan nan 8 0.02
為了嘗試解決這個問題,我使用了以下代碼,它實際上可能指向問題所在,但我確定我做錯了什么。 出於某種原因,我無法“找到”數據框中的值,即使我可以在那里看到它們。
#print first 4 rows
df1[:4]
gene_id FC_1 p_1
name1 2 0.05
name2 3 0.01
name3 8 0.02
'name1' in df1.gene_id
False
##The same is true when I do searches in df2, which might explain why the identical gene names aren't combining, but I have no idea why this is happening.
任何幫助將不勝感激,即使它只是將我指向一個我應該已經看過的先前提出的問題。
我能夠解決類似的問題。 第一步是使用df1.dtypes
和df2.dtypes
來確定我的列的數據類型。 事實證明,我的公共列A
和B
在df1
中屬於object
類型,在df2
中屬於int64
。
我最終對這兩列使用df1[['A','B']] = df1[['A','B']].astype('int64')
以確保A
和B
具有相同每個數據框中的數據類型。 合並然后正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.