使用 Pandas 合并数据框

Dataframe merging using Pandas

这是我的 df1 和 df2 数据帧代码。我正在尝试合并这些 df1 和 df2。我正在阅读 table,df1 有 1127 行和 1 列,df2 有 284403 行和 2 列。


   import pandas as pd
   df1 = pd.read_table("mass2.txt")
   df1.columns =['ID']
   print(df1)
   df2 = pd.read_table("combined.txt",sep=",")
   df2.columns =['Teff','ID']
   print(df2)
   columns_titles = ["ID","Teff"]
   df3=df2.reindex(columns=columns_titles)
   print(df3)
   df4 = df1.merge(df3, on='ID', how='left')
   print(df4)

我需要合并 df2 和 df1。 'ID' 列在 df1 和 df2。使用它我需要获得相应的 Teff。

例如,只要 df1 和 df2 的 ID 相同,我就需要这样的输出

df1 样本:

                ID 
       J22154748 + 4954052
       J22154748 + 4954052
       J22152631 + 4958343
       J22154748 + 4954052
       J22154748 + 4954052
       AP17515104-3446100
       AP17515104-3446100
       J05062845 + 4112062
       J16142485-3141000
       J16142485-3141000 

df2 样本:

  
                   ID                Teff
          J00000446 + 5854329      4757.323   
          J00000546 + 6152107      4937.3726  
          J00000797 + 6436119      4524.269   
          J00000940 + 5515185      4651.9395  
          J00001071 + 6258172      4546.092   
          AP17515104-3446100       4835.6143
          J23595676 + 7918072      4333.089
          J22154748 + 4954052     4859.9087 

预期的输出是这样的。

                ID                   Teff
          AP17515104-3446100       4835.6143
          AP17515104-3446100       4835.6143
          J16142485-3141000        4359.9766
          J22154748 + 4954052      4859.9087 
          J22154748 + 4954052      4859.9087 
       

但是当我 运行 我的代码时,我最终在 Teff 列中得到了 Nan。 但是当我使用 pd.dataframe 而不是当我使用 pd.read_table 时我得到了想要的输出。这有什么原因吗?

你能试着删除所有无用的字符吗?

>>> pd.merge(df1, df2['Teff'], how='inner',
          left_on=df1['ID'].replace(r'[^\w+-]', '', regex=True),
          right_on=df2['ID'].replace(r'[^\w+-]', '', regex=True))

                key_0                   ID       Teff
0   J22154748+4954052  J22154748 + 4954052  4859.9087
1   J22154748+4954052  J22154748 + 4954052  4859.9087
2   J22154748+4954052  J22154748 + 4954052  4859.9087
3   J22154748+4954052  J22154748 + 4954052  4859.9087
4  AP17515104-3446100   AP17515104-3446100  4835.6143
5  AP17515104-3446100   AP17515104-3446100  4835.6143

您还可以使用 df1['ID'].str.strip() 删除前导和尾随空格。