将两个pandas数据帧合并到索引上时出错

时间:2015-12-12 06:48:13

标签: python pandas

我正在尝试将两个pandas数据帧合并到索引上,但我收到错误...

这是df1

      alleles  chrom  pos strand  assembly#  center  protLSID  assayLSID  
rs#
TP121     C/A      0  121      +        NaN     NaN       NaN        NaN
TP135     G/A      0  135      +        NaN     NaN       NaN        NaN
TP283     A/G      0  283      +        NaN     NaN       NaN        NaN
TP302     C/T      0  302      +        NaN     NaN       NaN        NaN
TP334     T/G      0  334      +        NaN     NaN       NaN        NaN

这是df2

      1KS 2861 2862 2A 2KS 3KS 4KS 5B 5C A1  ...  WWA17replicate WWA18 WWA21  
rs#                                          ...
TP121   N    N    N  N   N   N   N  N  N  N  ...               N     N     N
TP135   N    N    G  N   N   N   N  N  N  N  ...               N     N     N
TP283   A    N    N  N   A   A   N  R  N  A  ...               N     N     N
TP302   C    C    N  Y   C   N   C  Y  Y  T  ...               Y     N     N
TP334   G    N    N  N   N   N   N  N  N  N  ...               N     N     N

当我尝试合并时,我收到此错误 - "['TP121' 'TP135' 'TP283' ..., 'TP251072' 'TP251178' 'TP251355'] not in index"当它们明显在两个索引中时。我在哪里做错了?

pd.merge(df1, df2, on=df.index, how = "outer")

2 个答案:

答案 0 :(得分:1)

你可以尝试:

pd.concat([df1, df2], axis=1)

答案 1 :(得分:0)

对于您的任务pd.concat比合并更好。但是使用merge,您可以在列reset_index上合并两个数据框rs#

pd.merge(df1.reset_index(), df2.reset_index(), on='rs#')

如果您需要结果数据框来获得原始索引,那么可以使用set_index

pd.merge(df1.reset_index(), df2.reset_index(), on='rs#').set_index('rs#')

In [50]: df1
Out[50]: 
      alleles  chrom  pos strand  assembly#  center  protLSID  assayLSID
rs#                                                                     
TP121     C/A      0  121      +        NaN     NaN       NaN        NaN
TP135     G/A      0  135      +        NaN     NaN       NaN        NaN
TP283     A/G      0  283      +        NaN     NaN       NaN        NaN
TP302     C/T      0  302      +        NaN     NaN       NaN        NaN
TP334     T/G      0  334      +        NaN     NaN       NaN        NaN

In [51]: df2
Out[51]: 
      1KS 2861 2862 2A 2KS 3KS 4KS 5B 5C A1 WWA17replicate WWA18 WWA21
rs#                                                                   
TP121   N    N    N  N   N   N   N  N  N  N              N     N     N
TP135   N    N    G  N   N   N   N  N  N  N              N     N     N
TP283   A    N    N  N   A   A   N  R  N  A              N     N     N
TP302   C    C    N  Y   C   N   C  Y  Y  T              Y     N     N
TP334   G    N    N  N   N   N   N  N  N  N              N     N     N

In [52]: pd.merge(df1.reset_index(), df2.reset_index(), on='rs#').set_index('rs#')
Out[52]: 
      alleles  chrom  pos strand  assembly#  center  protLSID  assayLSID 1KS  \
rs#                                                                            
TP121     C/A      0  121      +        NaN     NaN       NaN        NaN   N   
TP135     G/A      0  135      +        NaN     NaN       NaN        NaN   N   
TP283     A/G      0  283      +        NaN     NaN       NaN        NaN   A   
TP302     C/T      0  302      +        NaN     NaN       NaN        NaN   C   
TP334     T/G      0  334      +        NaN     NaN       NaN        NaN   G   

      2861  ...  2A 2KS 3KS 4KS 5B 5C A1 WWA17replicate WWA18 WWA21  
rs#         ...                                                      
TP121    N  ...   N   N   N   N  N  N  N              N     N     N  
TP135    N  ...   N   N   N   N  N  N  N              N     N     N  
TP283    N  ...   N   A   A   N  R  N  A              N     N     N  
TP302    C  ...   Y   C   N   C  Y  Y  T              Y     N     N  
TP334    N  ...   N   N   N   N  N  N  N              N     N     N  

[5 rows x 21 columns]