熊猫在循环中合并数据帧

jak*_*ong 4 python merge pandas

我创建了一个循环来将 sqlite 数据库读入 Pandas 数据帧,并且我试图将它们合并在一起 "Code"

...
df = pandas.Dataframe()  # Creating an empty dataframe for merging at the end

items = ["tb1", "tb2", "tb3"]

for each_item in items:
    my_value = pandas.read_sql_query('select "Code", "Name", "Value" from {tb_name} where "Value" is not null'
                                     .format(tbl_name='"%s"' % each_item), con=engine)

    print(my_value)

    # This below code is my attempt to merge the dataframes that was obtained through the for loop
    merge_value = pandas.merge(my_value, df, on='Code', how='outer')
Run Code Online (Sandbox Code Playgroud)

my_value 结果:

# tb1 results
     Code          Name      Value
0     C01         Name1   0.010000
1     C02         Name2   0.001200
2     C03         Name3   0.000300
3     C04         Name4   0.001700

# tb2 results
     Code          Name      Value
0     C03         Name3   0.010000
1     C04         Name4   0.001200
2     C05         Name5   0.000300
3     C06         Name6   0.001700

# tb3 results
     Code          Name      Value
0     C01         Name1   0.010000
1     C02         Name2   0.001200
2     C05         Name5   0.000300
3     C06         Name6   0.001700
Run Code Online (Sandbox Code Playgroud)

我正在尝试将它们合并到一张表中,如下所示:

# desired results
     Code          Name    Value_x   Value_y    Value_Z
0     C01         Name1   0.010000      NULL   0.010000      
1     C02         Name2   0.001200      NULL   0.001200      
2     C03         Name3   0.000300  0.010000       NULL
3     C04         Name4   0.001700  0.001200       NULL      
4     C05         Name5       NULL  0.000300   0.000300  
5     C06         Name6       NULL  0.001700   0.001700  
Run Code Online (Sandbox Code Playgroud)

我如何合并它?我试过下面的,但它产生key error: Code

merge_value = pandas.merge(my_value, df, on='Code', how='outer')
Run Code Online (Sandbox Code Playgroud)

Jef*_*eda 7

您可以使用 DataFrame.merge 而不是 pandas.merge

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html


使用列创建一个空的 DataFrame 以防止“关键错误:代码”

df = pd.DataFrame(columns=['Code']) 
Run Code Online (Sandbox Code Playgroud)

然后在循环中,你

df.merge(my_value, on='Code', how='outer') 
Run Code Online (Sandbox Code Playgroud)

创建 my_value 后