【问题标题】:pandas merging dataframes in a loop [duplicate]熊猫在循环中合并数据帧[重复]
【发布时间】:2018-02-11 05:30:31
【问题描述】:

我创建了一个循环来将 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')

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

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

# 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  

如何合并它?我尝试了以下方法,但它产生了key error: Code

merge_value = pandas.merge(my_value, df, on='Code', how='outer')

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:

    您可以使用 DataFrame.merge 代替 pandas.merge

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


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

    df = pd.DataFrame(columns=['Code']) 
    

    然后在循环中,你

    df.merge(my_value, on='Code', how='outer') 
    

    创建 my_value 之后

    【讨论】:

    • 您好,问题是tb1, tb2, tb3是通过for循环获取的。所以我无法明确输入您提出的解决方案。
    • 尝试用 df = pd.DataFrame(columns=['Code']) 列创建一个空的 DataFrame,然后在循环中,你 df.merge(my_value, on='Code', how= 'outer') 创建 my_value 后
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2017-03-21
    • 1970-01-01
    • 2019-12-07
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    相关资源
    最近更新 更多