Есть ли более эффективный способ, чем это, если заявление для больших данных в Python - PullRequest
0 голосов
/ 21 сентября 2018

Итак, я имею дело с большим файлом данных, который содержит 1,3 миллиона строк.То, что я пытаюсь сделать, это просто, я хочу изменить значения в некоторых столбцах, учитывая некоторые условия.

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) по моим полным данным занимает больше 10 часов в питоне.Так что мне просто интересно, есть ли что-то не так в моих кодах?Есть ли другой более эффективный способ, чтобы он мог читать и переписывать быстрее?...

Буду признателен за любую помощь!:)

Я немного новичок в python, и это мой первый пост с вопросом, спасибо всем за ваш комментарий:)

1 Ответ

0 голосов
/ 21 сентября 2018

Вместо циклов вы можете попробовать 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
...