替代 .concat() 方法,现在它已被弃用?

问题描述 投票:0回答:1

我有两个数据框,它们都可以为空,我想将它们连接起来。

在我可以做之前:

output_df= pd.concat([df1, df2])

但现在我遇到了

FutureWarning:不推荐使用 DataFrame 与空或全 NA 条目串联的行为。在未来版本中,在确定结果 dtypes 时将不再排除空列或全 NA 列。要保留旧行为,请在连接操作之前排除相关条目。

一个简单的解决方法是:

if not df1.empty and not df2.empty:
    result_df = pd.concat([df1, df2], axis=0)
elif not df1.empty:
    result_df = df1.copy()
elif not df2.empty:
    result_df = df2.copy()
else:
    result_df = pd.DataFrame()

但这看起来很丑陋。有没有人有更好的解决办法?

仅供参考:这是在 pandas 发布后出现的 v2.1.0

python pandas dataframe concatenation
1个回答
0
投票

准确地说,

concat
并未被弃用(恕我直言),但我可以使用以下示例触发this
FutureWarning
,而
df2
是一个具有不同的空DataFrame
dtypes
df1
:

df1 = pd.DataFrame({"A": [.1, .2, .3]})
df2 = pd.DataFrame(columns=["A"], dtype="object")

out = pd.concat([df1, df2]) ; print(out)

     A
0  0.1
1  0.2
2  0.3

作为您的情况的解决方案,您可以执行以下两种操作之一:

out = (df1 if df2.empty else df2 if df1.empty
       else pd.concat([df1, df2]) # if both non empty
      )

out = pd.concat([df1.astype(df2.dtypes), df2.astype(df1.dtypes)])
© www.soinside.com 2019 - 2024. All rights reserved.