从 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
我正在使用 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