从 pandas 数据框中提取值

extract values from pandas dataframe

我正在使用 Pandas 并想从多个数据帧中提取值。 例如,有如下三个数据框。

df1 = pd.DataFrame({'key': ['K0', 'K1'],
                     'A': ['A0', 'A1'],
                     'B': ['B0', 'B1']})

df2 = pd.DataFrame({'key': ['K1', 'K22'],
                      'C': ['C1', 'C3'],
                      'D': ['D1', 'D3']})

df3 = pd.DataFrame({'key': ['K1', 'K30'],
                      'E': ['E1', 'E3'],
                      'F': ['F1', 'F3']})

如果密钥在数据帧之间共享,我想提取值。 所以我做了下面

pd.merge(df1,df2, on='key')

这显示在下面,这很好。

    A   B key   C   D
0  A1  B1  K1  C1  D1

但是,如果我尝试对超过 2 个数据帧执行此操作,它将无法工作。 例如,以下不起作用。

pd.merge(df1,df2,df3, on='key')

我觉得pd.merge不适合这个。 有谁知道这样做的好方法吗?

谢谢!

pd.merge 使用两个数据帧(左和右)

您可以使用 pd.concat 连接数据帧列表。

pd.concat([df1,df2,df3],axis=1)

对...

pd.concat([df1.set_index('key'),df2.set_index('key'),df3.set_index('key')],axis=1,join='inner')

pd.merge 不适用于超过 2 个数据帧。但是,您可以尝试使用 pd.concat。检查 here

您可以像这样重复合并:

df = df1

for right in [df2, df3]:
    df = df.merge(right, on='key')

运行 根据您的数据得出:

    A   B key   C   D   E   F
0  A1  B1  K1  C1  D1  E1  F1

只需让 for 循环覆盖您要与第一个数据帧合并的所有其他数据帧。

虽然我不是 Pandas 专家,但我想对 pd.merge 的连续调用会正确地合并它们:pd.merge(pd.merge(df1, df2), df3)。对于程序化缩减,请查看 functools.reduce(pd.merge, dfs)(其中 dfs 是数据帧的可迭代)。 Pandas 可能有一个内置的解决方案来更好地适应,但这会起作用。希望这对您有所帮助!

您可以使用 Pandas 连接函数。

下面的代码将为您提供所需的结果。

pd.concat([df1,df2,df3],axis=1) 

您可以在 pandas 文档 here

中找到更多信息

与 concat 不同,Merge 一次只能应用于两个数据帧,因此解决方案是在 merge 的第一个输出上使用 merge

df1.merge(df2, on='key').merge(df3, on = 'key')

给予

    A   B   key C   D   E   F
0   A1  B1  K1  C1  D1  E1  F1