Tim*_*e W 17 python concatenation dataframe pandas
我有两个数据框,它们都可以为空,我想将它们连接起来。
在我可以做之前:
output_df= pd.concat([df1, df2])
Run Code Online (Sandbox Code Playgroud)
但现在我遇到了
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()
Run Code Online (Sandbox Code Playgroud)
但这看起来很丑陋。有人有更好的解决方案吗?
仅供参考:这是在pandas发布v2.1.0之后出现的
Tim*_*ess 10
准确地说,concat它并没有被弃用(并且不会被恕我直言),但我可以通过以下示例触发它 ,同时是一个与以下内容不同的空 DataFrame :FutureWarning2.1.1df2dtypesdf1
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
Run Code Online (Sandbox Code Playgroud)
作为您的情况的解决方案,您可以尝试像您所做的那样:
out = (df1.copy() if df2.empty else df2.copy() if df1.empty
else pd.concat([df1, df2]) # if both DataFrames non empty
)
Run Code Online (Sandbox Code Playgroud)
或者甚至是这个?:
out = pd.concat([df1.astype(df2.dtypes), df2.astype(df1.dtypes)])
Run Code Online (Sandbox Code Playgroud)
我发现这个基于 @Timeless 答案的解决方案对我来说最“不丑陋”。
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([], columns=['A', 'B'])
In [3]: df = pd.concat([
...: df if not df.empty else None,
...: pd.DataFrame([{'A': 1.1, 'B': 2.2}])
...: ])
In [4]: df
Out[4]:
A B
0 1.1 2.2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15498 次 |
| 最近记录: |