python 合并数据集_python – 在Pandas中合并两个数据集

Thyere是一个问题,你在一个df中的列id是对象(显然是字符串)和另一个int,所以没有匹配并获得NaN.

如果有相同的dtypes:

print (df1['id'].dtypes)

int64

print (df2['id'].dtypes)

int64

merged = pd.merge(df1, df2, how="left", on="id")

print (merged)

Date id Market_Cap Ticker

0 2000 1 400 Shell

1 2000 2 200 ExxonMobil

2 2001 1 410 Shell

3 2001 2 220 ExxonMobil

如果需要添加一个新列的另一个解决方案是map:

df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])

print (df1)

Date id Market_Cap Ticker

0 2000 1 400 Shell

1 2000 2 200 ExxonMobil

2 2001 1 410 Shell

3 2001 2 220 ExxonMobil

模拟你的问题:

print (df1['id'].dtypes)

object

print (df2['id'].dtypes)

int64

df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])

print (df1)

Date id Market_Cap Ticker

0 2000 1 400 NaN

1 2000 2 200 NaN

2 2001 1 410 NaN

3 2001 2 220 NaN

并且解决方案在astype(或df2到str中的列id)转换为int:

df1['id'] = df1['id'].astype(int)

#alternatively

#df2['id'] = df2['id'].astype(str)

df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])

print (df1)

Date id Market_Cap Ticker

0 2000 1 400 Shell

1 2000 2 200 ExxonMobil

2 2001 1 410 Shell

3 2001 2 220 ExxonMobil

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值