我有两个数据框,它们都可以为空,我想将它们连接起来。
在我可以做之前:
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
concat
并未被弃用(恕我直言),但我可以使用以下示例在 FutureWarning
中触发 this2.1.1
,而 df2
是具有与 dtypes
不同的
df1
的空 DataFrame :
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.copy() if df2.empty else df2.copy() if df1.empty
else pd.concat([df1, df2]) # if both DataFrames non empty
)
out = pd.concat([df1.astype(df2.dtypes), df2.astype(df1.dtypes)])