gpt4 book ai didi

python - 我们如何使用 pandas 在 python 中使用 Coalesce 来处理多个数据帧

转载 作者:行者123 更新时间:2023-11-28 21:32:18 26 4
gpt4 key购买 nike

我们如何将 Coalesce 与多个数据框一起使用。

columns_List = Emp_Id, Emp_Name, Dept_Id...

我有两个数据框在 python 脚本中使用。 df1[Columns_List] , df2[columns_List] 。在这两个数据框中,我使用了相同的列,但在两个数据框中我将具有不同的值。

我如何使用 Coalesce 以便可以说:在 Dataframe df1[Columns_List] 中-- 我有Emp_Name null那我想选Emp_Name来自df2[Columns_list]

我正在尝试创建输出 CSV 文件。

如果我的问题框架有误,请抱歉..

请查找以下示例数据。

对于 Dataframe1 -- df1[Columns_List] .. 请找到下面的输出

EmpID,Emp_Name,Dept_id,DeptName
1,,1,
2,,2,

对于 Dataframe2 -- df2[Columns_List] .. 请找到下面的输出

EmpID,Emp_Name,Dept_id,DeptName
1,XXXXX,1,Sciece
2,YYYYY,2,Maths

我有 Json 文件形式的源。一旦我通过 python 解析数据,我就会在同一个脚本中使用 2 个数据帧。在数据帧 1 ( df1) 中,我将 Emp_Name 和 Dept_Name 设置为 null。在这种情况下,我想从 Dataframe2 (df2) 中选取数据。

在上面的示例中,我提供了几列。但我可能有 n 列。但列顺序和列名称始终相同。我试图以这种方式实现,如果 df1 中的任何列为空,那么我想从 df2 中选取值。

这可能吗..请帮我提出任何建议...

最佳答案

您可以使用pandas.DataFrame.combine 。此方法可以满足您的需要:它根据自定义函数从两个数据帧中获取元素来构建一个数据帧。
然后,您可以编写一个自定义函数,该函数从数据帧一中选取元素,除非该元素为 null,在这种情况下,该元素将从数据帧二中获取。

考虑以下两个数据框。我根据您的示例构建了它们,但有一点小小的不同,以强调只有空字符串才会被替换:

columnlist = ["EmpID", "Emp_Name", "Dept_id", "DeptName"]

df1 = pd.DataFrame([[1, None, 1, np.NaN], [2, np.NaN, 2, None]], columns=columnlist)
df2 = pd.DataFrame([[1, "XXX", 2, "Science"], [2, "YYY", 3, "Math"]], columns=columnlist)

他们是:

df1
EmpID Emp_Name Dept_id DeptName
0 1 NaN 1 NaN
1 2 NaN 2 NaN

df2
EmpID Emp_Name Dept_id DeptName
0 1 XXX 1 Science
1 2 YYY 3 Math

您需要做的是:

ddf = df1.combine(df2, lambda ss, rep_ss : pd.Series([r if pd.isna(x) else x for x, r in zip(ss, rep_ss)]))

获取ddf:

ddf
EmpID Emp_Name Dept_id DeptName
0 1 XXX 1 Science
1 2 YYY 2 Math

如您所见,只有 df1 中的 Null 值已替换为 df2 中的相应值。

编辑:更深入的解释

既然评论中有人问我,让我对解决方案进行更多解释:

ddf = df1.combine(df2, lambda ss, rep_ss : pd.Series([r if pd.isna(x) else x for x, r in zip(ss, rep_ss)]))

有点紧凑,但除了一些基本的 Python 技术(例如列表推导式)以及 pandas.DataFrame.combine 的使用之外什么也没有。我上面链接的文档详细介绍了 pandas 方法。它逐列比较两个数据帧:这些列被传递给一个必须返回 pandas.Series 的自定义函数。该系列成为返回的数据框中的一列。
在本例中,自定义函数是 lambda,它使用列表理解来循环元素对(每列一个)并仅选取该对中的一个元素(如果不为空,则为第一个元素) ,否则为第二个)。

关于python - 我们如何使用 pandas 在 python 中使用 Coalesce 来处理多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56825147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com