比较两个电子表格并提取值
我有两个不同数量的行和列的电子表格。
我想要做的是将两者进行比较,并从a1.xlsx
中提取与a1.xlsx
的列名相匹配的A和B的值,并将这些值复制到a2.xlsx
中的列C和D. 我知道如何在Excel中使用索引匹配,但不使用Python的pandas。
电子表格1( a1.xlsx
)
Index ABC 0 s 0.2 new york 1 d 1 vienna 2 g 2 london 3 c 3 tokyo 4 r 2 paris 5 d 1 berlin 6 a 8 madrid 7 f 10 seattle
电子表格2( a2.xlsx
)
Index ABCD 0 dublin 34 xx 1 seoul 36 xx 2 london 12 xx 3 berlin 4 xx 4 tokyo 6 xx 5 seatte 22 xx
假设spreadsheet1被加载到pandas df,并且电子表格2被加载到df1,那么你可以从merge
结果中分配值:
In [20]: df1[['C','D']] = df1.merge(df, left_on='A', right_on='C',how='left')[['A_y','B_y']] df1 Out[20]: ABCD Index 0 dublin 34 NaN NaN 1 seoul 36 NaN NaN 2 london 12 g 2 3 berlin 4 d 1 4 tokyo 6 c 3 5 seattle 22 f 10
只是在我们合并的时候稍微解释一下,我们执行一个左边的合并,这将产生一个列冲突,因为我们有列名冲突:
In [24]: df1.merge(df, left_on='A', right_on='C',how='left') Out[24]: A_x B_x C_x D A_y B_y C_y 0 dublin 34 xx NaN NaN NaN 1 seoul 36 xx NaN NaN NaN 2 london 12 xxg 2 london 3 berlin 4 xxd 1 berlin 4 tokyo 6 xxc 3 tokyo 5 seattle 22 xxf 10 seattle
我们只关心列A_y
和B_y
,我们执行一个左合并,因为如果我们做了默认的合并types,它是“内部的”,那么这将不会与原始的dfalignment,即值将被移到df的顶部。