有没有比这更有效的方法,如果在Python中的大数据的语句

时间:2018-09-21 17:53:22

标签: python performance if-statement bigdata processing-efficiency

因此,我正在处理一个具有130万行的大数据文件。 我想做的很简单,我想在某些条件下更改某些列中的值。

for i in range(0,len(data2)):    #where len(data2) is about 1.3 million
    if data2.loc[i,'PPA']==0:
        data1.loc[i,'LDU']=0        #(data1 and data2 have same amount of rows)

,我还需要为其他一些列设置格式。例如,我想将性别格式设置为0或1。

数据如下:

    data['Gender']

    Out[156]: 
    0          F
    1          M
    2          F
    3          F
          ..
    1290573    M
    1290574    F
    Name: Gender, Length: 1290575, dtype: object


#Format to 0 and 1
for i in range(0,len(data)):
    if data.loc[i,'Gender']=='F':
        data.loc[i,'Gender']=0;
    else:
        data.loc[i,'Gender']=1

关于处理时间,我注意到一些不寻常的事情... 我将前5000行保存到一个新的csv文件中,当我在示例数据上测试我的代码时,它运行良好且速度很快,就像在10秒内一样。 但是,当我尝试在真实数据上运行它并让它执行

for i in range(0,10000) #instead of the full length of data

大约需要9分钟。

上次我在我的完整数据上格式化另一列(赋值为0和1)时,在python中花费了10多个小时。所以我只是想知道我的代码是否有错误?还有其他更有效的方法来使其读取和重写更快吗? ...

任何帮助将不胜感激! :)

我是python的新手,这是我的第一个问题帖子,谢谢大家的评论:)

1 个答案:

答案 0 :(得分:1)

您可以尝试np.where

来代替循环
df=pd.DataFrame({'Gender':['M','F']})
df['Numeric_Gender'] = np.where(df.Gender=='M',1,0)
df
Gender  Numeric_Gender
M        1
F        0