左连接表熊猫存在问题(ValueError:您正在尝试合并object和int64列。)

时间:2019-03-21 10:49:10

标签: python sql excel oracle pandas

我有两个要离开的列表。

这是我生成第一个列表的方式:

# NB Oracle connection
first_list = pd.read_sql('SELECT firstname, lpad(identifier, 4, 0) from table1', con=Connection)

第二个列表:

second_list = pd_read_excel('excelfile.xlsx', converters={'identifier': str})

有点简化:第一个列表如下:

   name  identifier
0  Firstname     1201
1  Secondname       0
2  Thirdname     1855
3  Fourthname    3333
4  Fifthname     1414

第二个列表如下:

   identifier    BIC          BANK
0  0             UNKNOWN      Unknown
1  1201          DNBANKNOKK   DNB Bank ASA 
2  1855          EIDSNO21     Eidsberg Sparebank
3  3333          RYGSNO21     Sparebank1 Østfold Akershus
4  1414          LOSKNO21     Sparebank 1 Lom og Sjåk

我希望最终列表看起来像这样:

   name          identifier  BIC          BANK
0  Firstname     1201        DNBANKNOKK   DNB Bank ASA
1  Secondname       0        UNKNOWN      Unknown
2  Thirdname     1855        EIDSNO21     Eidsberg Sparebank
3  Fourthname    3333        RYGSNO21     Sparebank1 Østfold Akershus
4  Fifthname     1414        LOSKNO21     Sparebank 1 Lom og Sjåk

但是,当我尝试确定最终名单时:

final_list = first_list.join(second_list, on='identifier', how='left')

我收到以下错误:ValueError:您正在尝试合并object和int64列。如果要继续,则应使用pd.concat

尝试此操作时出现相同的错误:

first_list['identifier'] = first_list['identifier'].astype(str)
second_list['identifier'] = second_list['identifier'].astype(str)
final_list = first_list.join(second_list, on='identifier', how='left')

运行dtypes返回两个列表标识符作为对象。

2 个答案:

答案 0 :(得分:1)

pandas.DataFrame.mergecols <- colSums(mydf == 0 | mydf == 1) == nrow(mydf) mydf[cols] <- lapply(mydf[cols], as.factor) str(mydf) #'data.frame': 5 obs. of 3 variables: # $ CA: Factor w/ 2 levels "0","1": 2 1 2 1 2 # $ CB: num 1 12 21 0 7 # $ CC: Factor w/ 2 levels "0","1": 2 1 2 1 2 一起使用:

how='left'

可以在以下位置找到关于final_list = pd.merge(first_list, second_list, on='identifier', how='left') print(final_list) name identifier BIC BANK 0 Firstname 1201 DNBANKNOKK DNB Bank ASA 1 Secondname 0 UNKNOWN Unknown 2 Thirdname 1855 EIDSNO21 Eidsberg Sparebank 3 Fourthname 3333 RYGSNO21 Sparebank1 Østfold Akershus 4 Fifthname 1414 LOSKNO21 Sparebank 1 Lom og Sjåk 中的merging的详尽介绍:
Pandas Merging 101

答案 1 :(得分:0)

请尝试如下使用merge

import pandas as pd

final_list = pd.merge(first_list, second_list, how='outer',left_on=['identifier'], right_on=['identifier'])