使用 Pandas 将两个数据框列合并为数百万行时的性能问题

数据挖掘 Python 熊猫 表现
2022-02-23 18:20:09

我正在尝试将两个地址列合并为一个,并用“--”分隔生成的字符串。该数据集有 1000 万行和 33 列 - 但行数每月增长 100 万左右。Pandas/Python 中的这一行非常慢。关于如何使其更快且可扩展以供将来使用的任何想法?

df['address'] = df[['address1', 'address2']].apply(lambda x: '--'.join(x.dropna().astype(str).values), axis=1)
1个回答

使用我的解决方案,您必须使用字符串类型解析列:

第一的:

df[["address1", "address2"]] = df[["address1", "address2"]].dropna().astype(str)

然后定义连接函数来连接两个字符串

def concat_string(a, b):
    return a + '--' +  b

最后,我建议您使用 pandas 系列,这将改善您的操作。

在这里,我在 concat_string 上面定义的函数中应用组合(来自 pandas 系列)。concat_string 从 df['address1'] 中获取 param 元素并将它们与 df['address2'] 组合。

结合矢量化操作,它“取代”了传统的循环。

df['address'] = df['address1'].combine(df['address2'], concat_string)

基准:

df.shape => (10000, 2)

%time df['address'] = df[['address1', 'address2']].apply(lambda x: '--'.join(x.dropna().astype(str).values), axis=1)
CPU times: user 4.6 s, sys: 18.8 ms, total: 4.62 s
Wall time: 4.64 s

%time df['address_Test'] = df['address1'].combine(df['address2'], concat_string)
CPU times: user 302 ms, sys: 27.6 ms, total: 329 ms
Wall time: 321 ms