使用 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()
删除前导和尾随空格。
这是我的 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()
删除前导和尾随空格。