Python: странное поведение в условии if - PullRequest
0 голосов
/ 04 октября 2019

Сегодня я обнаружил, что мой питон pandas ведет себя странно. Позвольте мне показать вам следующий пример. Сначала я импортирую pandas и создаю пример фрейма данных.

>> import pandas as pd 
>> pd.__version__
'0.25.1'

>> df_test = pd.DataFrame([
    {'make': 'toyota', 'model': 'yaris', 'body': 'hatchback'},
    {'make': 'toyota', 'model': 'corolla', 'body': 'sedan'},
    {'make': 'toyota', 'model': 'rav 4', 'body': 'suv'},
    {'make': 'toyota', 'model': 'avensis', 'body': 'sedan'},
    {'make': 'toyota', 'model': 'avensis', 'body': 'combi'},
    {'make': 'toyota', 'model': 'avensis', 'body': 'mpv'},
    {'make': 'toyota', 'model': 'avensis', 'body': 'pickup'},
])
>> print(df_test)
     make    model       body
0  toyota    yaris  hatchback
1  toyota  corolla      sedan
2  toyota    rav 4        suv
3  toyota  avensis      sedan
4  toyota  avensis      combi
5  toyota  avensis        mpv
6  toyota  avensis     pickup

Пока все хорошо. Но теперь существует проблема со следующим кодом.

>> def unify_body_for_toyota_avensis(row):
       if row['make']=='toyota' and row['model']=='avensis' and row['body'] in ['hatchback', 'mpv', 'pickup']:
           return 'combi'
       return row['body']

>> df_test['body'] = df_test.apply(lambda row: unify_body_for_toyota_avensis(row), axis=1)
File "<ipython-input-53-cd7640bc0c54>", line 2
  if row['make']=='toyota' and row['model']=='avensis' and row['body'] in ['hatchback', 'mpv', 'pickup']:
                                   ^
SyntaxError: invalid character in identifier

Однако, когда я удаляю первое условие из функции unify_body_for_toyota_avensis, все в порядке:

>> def unify_body_for_toyota_avensis(row):
       if row['model']=='avensis' and row['body'] in ['hatchback', 'mpv', 'pickup']:
           return 'combi'
       return row['body']

>> df_test['body'] = df_test.apply(lambda row: unify_body_for_toyota_avensis(row), axis=1)
>> print(df_test)
     make    model       body
0  toyota    yaris  hatchback
1  toyota  corolla      sedan
2  toyota    rav 4        suv
3  toyota  avensis      sedan
4  toyota  avensis      combi
5  toyota  avensis      combi
6  toyota  avensis      combi

Пожалуйста,не могли бы вы мне помочь, чего мне не хватает?

...