使用pandas中的大数据集

时间:2017-11-19 20:06:09

标签: python python-3.x pandas bigdata data-science

我一直在使用这个数据集:https://www.kaggle.com/nsharan/h-1b-visa
我将主数据帧拆分为两个:
soc_null数据帧 - 其中SOC_NAME列具有NaN值
soc_not_null - 其中SOC_NAME列具有NaN以外的值
为了填充soc_null数据帧的SOC_NAME列中的NaN值,我想出了这段代码:

for index1, row1 in soc_null.iterrows():
    for index2, row2 in soc_not_null.iterrows():
        if row1['JOB_TITLE'] == row2['JOB_TITLE']:
            soc_null.set_value(index1,'SOC_NAME',row2['SOC_NAME'])

这段代码的问题是soc_null的长度是17734,soc_not_null的长度是2984724,我运行了几个小时,但只更新了几百个值,因此无法执行此n ^ 2复杂性代码完全在一台机器上。
我相信必须有一个更好的方法来做到这一点,可能比我的更大的数据集,因为清洁过程后还有其他几个部分需要两个循环处理

1 个答案:

答案 0 :(得分:0)

有一些nice posts可以解释您的需求。这是一个解决方案:

import pandas as pd
import numpy as np

values = [
    {'JOB_TITLE':'secretary', 'SALARY':30000},
    {'JOB_TITLE':'programmer', 'SALARY':60000},
    {'JOB_TITLE':'manager', 'SALARY':None},
    {'JOB_TITLE':'president', 'SALARY':None},
]

secret_values = [
    {'JOB_TITLE':'manager', 'SALARY':150000},
    {'JOB_TITLE':'president', 'SALARY':1000000},
]

df = pd.DataFrame(values)
df_secret = pd.DataFrame(secret_values)
df.set_index('JOB_TITLE', inplace=True)
df_secret.set_index('JOB_TITLE', inplace=True)

df.combine_first(df_secret).reset_index()

PS:避免在大型数据集上使用for-each循环。使用Pandas.DataFrame和其他优化的东西。