用于循环的pandas,适用于小型数据帧

时间:2018-05-21 19:13:43

标签: python pandas

我正在使用邮政编码表为choroplot制作县表。当我给它一个小玩具示例时,我的代码工作正常,但当我给它数据帧时,它会挂断。我无法共享数据框,但它是+/- 70,000个邮政编码,编码为字符串,值可以是正确的邮政编码,非数字字符串或不是正确的邮政编码的数字字符串,每个字符串格式。这是代码:

# import libraries
import numpy as np
import pandas as pd

# load customer email table
df = pd.read_csv('customer_April2018.csv', encoding='latin-1')

# load zip code table
zc = pd.read_csv('us_postal_codes.csv', encoding='latin-1')

def zip_toCounty(zip):
    for i, row in zc.iterrows():
        try:
            if int(zip) == zc['ZipCode'].loc[i] : return zc['County'].loc[i]    
        except ValueError : return 'No County'
    return 'No County'

g = lambda s : zip_toCounty(s)

df['County']=df['ZipCode'].apply(g)

df.to_csv('join_test.csv',index=False)

我没有收到错误,但估计完成时间超过40小时,考虑到数据的大小,这是完全不合理的。我必须使用错误的东西,我怎样才能加快处理速度?一个人建议使用哈希函数,这是最好的选择吗?

1 个答案:

答案 0 :(得分:1)

你可以完全没有循环和函数,只需合并ZipCode列上的数据集:

new_df = pd.merge(df, zc, how="left", left_on="ZipCode", right_on="ZipCode")