pandas join给出了NaN值

时间:2018-01-12 19:11:12

标签: python-3.x pandas join

我想加入2个DataFrames

邮政编码数据库(前10个条目)

    0   zip_code           City       State       County  Population
0   0      90001    Los Angeles  California  Los Angeles       54481
1   1      90002    Los Angeles  California  Los Angeles       44584
2   2      90003    Los Angeles  California  Los Angeles       58187
3   3      90004    Los Angeles  California  Los Angeles       67850
4   4      90005    Los Angeles  California  Los Angeles       43014
5   5      90006    Los Angeles  California  Los Angeles       62765
6   6      90007    Los Angeles  California  Los Angeles       45021
7   7      90008    Los Angeles  California  Los Angeles       30840
8   8      90009    Los Angeles  California  Los Angeles           -
9   9      90010    Los Angeles  California  Los Angeles        1943

数据(前10个条目)

    buyer                               zip_code
0   SWEENEY,THOMAS R & MICHELLE H       NaN
1   DOUGHERTY,HERBERT III & JENNIFER M  NaN
2   WEST COAST RLTY SVCS INC            NaN
3   LOVE,JULIE M                        NaN
4   SAHAR,DAVID NaN
5   SILBERSTERN,BRADLEY E TRUST         91199
6   LEE,SUSAN & JIMMY C                 92025
7   FRAZZANO REAL ESTATE I NC           NaN
8   RUV INVESTMENTS LLC                 91730
9   KAOS KAPITAL LLC                    NaN

所以决赛桌应该有[buyer,zip_code,City,County]。我加入了邮政编码。

data_2 = data.join(zipcode_database[['City', 'County', 'zip_code']].set_index('zip_code'), on='zip_code')

但是 city county 列是 NaN ,即使对于数据中的元组,其中zipcode实际存在

    buyer   zip_code    City    County
10  LANDON AVE TRUST 37736  NaN NaN NaN
11  UMAR,AHMAD  NaN NaN NaN
12  3 JPS INC   90717   NaN NaN
13  T & L HOLDINGS INC  95610   NaN NaN
14  CAHP HOLDINGS LLC   90808   NaN NaN
15  REBUILDING TOGETHER LONG BEACH  92344   NaN NaN
16  COLFIN AI-CA 4 LLC  NaN NaN NaN
17  GUTIERREZ,HUGO  91381   NaN NaN
18  VALBRIDGE CAP GOLDEN GATE FUND  NaN NaN NaN
19  SOLARES,OSCAR   92570   NaN NaN

为什么会这样?邮政编码数据库的所有邮政编码均为90001 - 999950。

我的第一个想法是" zip_code"的数据类型。两者都不同:

print(zipcode_database['zip_code'].dtype)
print(data['zip_code'].dtype)

输出:

int64
object

考虑使用astype进行类型转换,但这不适用于NaN值。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以将NaN值转换为float类型,但不能转换为int。在您的情况下,我会将两个DataFrame中的zip_code字段转换为float,然后加入。

zipcode_database.zip_code = zipcode_database.zip_code.astype(float)
data.zip_code = data.zip_code.astype(float)
data_2 = data.join(zipcode_database[['City', 'County', 'zip_code']].set_index('zip_code'), on='zip_code')

我无法从您的示例数据中重现任何有意义的内容(没有匹配的邮政编码),但这应该可以解决问题。