我有两个要离开的列表。
这是我生成第一个列表的方式:
# 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返回两个列表标识符作为对象。
答案 0 :(得分:1)
将pandas.DataFrame.merge
与cols <- 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'])