python:merge() 搭配reduce() - 实现批量合并表等等

批量merge透视表

stackoverflow原问题链接。

假设我们有 >=3 个csv表格,使用pands.concat(),可以方便的实现纵向合并;可是横向合并怎么处理呢??

方法一:嵌套函数方法
df1.merge(df2,on='目标列的名称').merge(df3,on='目标列的名称')
  • 优点:简单易理解。
  • 缺点:不适合大批量处理。比如,我对过去N年的月收入进行透视、合并,需要写上12*Nmerge()函数。显然这是效率很低下的。
方法二:搭配reduce()函数,批量处理
import pandas as pd
from functools import reduce

df_list=[]
for i in ['table1名称', 'table2名称', ... , 'tableN名称']:
    df = pd.read_csv('文件路径{}.csv'.format(i), encoding=gbk, low_memory=False)   # 自动读取n个csv格式文件
    df_List.append(df)                  # 每读取一个csv格式文件,都存到列表当中。最终我们得到['table1', 'table2', ... , 'tableN']

df_final = reduce(lambda left, right: pd.merge(left, right, on='目标字段名称'), df_list)
print(df_final)
附注reduce()
reduce(function, sequence[, initial] -> value

案例:

from functools import reduce

def do_sum(x1, x2):
    return x1 + x2
    
a = reduce(do_sum, [1, 2, 3, 4])
print(a)                          # a的结果是 10。

此处,reduce()功能相当于

a = (((1+2)+3)+4)                 # => 10

等价于

from functools import reduce

LIST = [1, 2, 3, 4]
a = reduce(lambda left, right: left + right, LIST)

print(a)                           # 结果是 10。

你可能感兴趣的:(python:数据预处理)