在 pandas 1.4 中使用 concat 将字典添加到 Pandas DataFrame 中的行

mat*_*ack 9 python concatenation pandas

更新到 pandas 1.4 后,当使用 frame.append 将字典附加到 Pandas DataFrame 时,我现在收到以下警告。

FutureWarning: The frame.append method is deprecated and will be
removed from pandas in a future version. Use pandas.concat instead.
Run Code Online (Sandbox Code Playgroud)

下面是代码。尽管我想解决该警告,但这仍然有效。

report = report.append({
                "period":period,
                "symbol":symbol,
                "start_date":start_date,
                "start_price":start_price,
                "start_market_cap":start_market_cap,
                "end_date":end_date,
                "end_price":end_price,
                "end_market_cap":end_market_cap,
                "return":return_
            },ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

我已将代码更新为以下内容,这会引发不同的警告:

report = pd.concat([report,{
                "period":period,
                "symbol":symbol,
                "start_date":start_date,
                "start_price":start_price,
                "start_market_cap":start_market_cap,
                "end_date":end_date,
                "end_price":end_price,
                "end_market_cap":end_market_cap,
                "return":return_
            }],ignore_index=True)

TypeError: cannot concatenate object of type '<class 'dict'>'; only Series and DataFrame objs are valid
Run Code Online (Sandbox Code Playgroud)

2个问题:第一个警告是错误的吗?pandas 1.4 实现这一目标的方法是什么?谢谢。

Sat*_*rav 11

df即使是空的且没有列,@fantabolous 发布的答案也将起作用。

import pandas as pd 
df =  pd.DataFrame(columns=[])
data_dict = {"a":0,"b":2742,"c":13.38867188,"d":0}
df = pd.concat([df, pd.DataFrame([data_dict])], ignore_index=True)
df
Run Code Online (Sandbox Code Playgroud)


小智 3

用于loc分配单行值:

report.loc[len(report)] = {"period":period,
                           "symbol":symbol,
                           "start_date":start_date,
                           "start_price":start_price,
                           "start_market_cap":start_market_cap,
                           "end_date":end_date,
                           "end_price":end_price,
                           "end_market_cap":end_market_cap,
                           "return":return_
                          }
Run Code Online (Sandbox Code Playgroud)