如何在不将类型从整数更改为浮点类型的情况下将两个数据帧与 nan 合并
How to left merge two dataframes with nan without changing types from integer to float types
我正在尝试通过特定列上的键合并两个 pandas 数据帧(df1 和 df2),但我想保留两个 df 上没有匹配键的行。最后,我想要一个缺少该键列值的 df3。当我使用以下代码执行此操作时,我的整数将转换为浮点类型:
df3 = pd.merge(df1, df2, how= 'left', on=['Species Name'])
我可以通过以下方式将它们转换为 int64:
df3['Species ID'] = df3['Species ID'].astype('Int64')
但随后我的 NaN 被转换为“”,即 'pandas._libs.missing.NAType'。这是一个问题,因为我想使用 psycopg2 将 df3 插入到 postgresql 数据库中,但它不接受这样的 Nas。有谁知道如何正确合并这些 dfs 或如何在不弄乱 Na 格式的情况下修复浮点数?
df1:
Sample ID
Species Name
A
X
B
Y
C
NaN
df2:
Species Name
Species ID
X
1
Y
2
我最终得到的结果:
Sample ID
Species Name
Species ID
A
X
1.000
B
Y
2.000
C
NaN
NaN
使用 pd.IntXDtype
作为 Species ID
列的数据类型:
df2['Species ID'] = df2['Species ID'].astype(pd.Int8Dtype())
df3 = pd.merge(df1, df2, how= 'left', on=['Species Name'])
print(df3)
# Output
Sample ID Species Name Species ID
0 A X 1
1 B Y 2
2 C NaN <NA>
我正在尝试通过特定列上的键合并两个 pandas 数据帧(df1 和 df2),但我想保留两个 df 上没有匹配键的行。最后,我想要一个缺少该键列值的 df3。当我使用以下代码执行此操作时,我的整数将转换为浮点类型:
df3 = pd.merge(df1, df2, how= 'left', on=['Species Name'])
我可以通过以下方式将它们转换为 int64:
df3['Species ID'] = df3['Species ID'].astype('Int64')
但随后我的 NaN 被转换为“
df1:
Sample ID | Species Name |
---|---|
A | X |
B | Y |
C | NaN |
df2:
Species Name | Species ID |
---|---|
X | 1 |
Y | 2 |
我最终得到的结果:
Sample ID | Species Name | Species ID |
---|---|---|
A | X | 1.000 |
B | Y | 2.000 |
C | NaN | NaN |
使用 pd.IntXDtype
作为 Species ID
列的数据类型:
df2['Species ID'] = df2['Species ID'].astype(pd.Int8Dtype())
df3 = pd.merge(df1, df2, how= 'left', on=['Species Name'])
print(df3)
# Output
Sample ID Species Name Species ID
0 A X 1
1 B Y 2
2 C NaN <NA>