если операторы в итерации по столбцу в pandas датафрейме - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу перебрать столбец df ['Social Distancing Advisory'] и заменить элементы другими, используя .replace (), но, кажется, ничто не работает, когда я настраиваю его следующим образом.


import pandas as pd 

df = pd.read_excel('/Users/Arthur/Desktop/COVID-RA/state_data.xlsx')

for column in df['Social Distancing Advisory']:

  if df['Social Distancing Advisory'] == 'sah':
    df['Social Distancing Advisory'].replace('sah','1')

  if df['Social Distancing Advisory'] == 'sip':    
    df['Social Distancing Advisory'].replace('sip','0')
df

ValueError: Значение истинности Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Вы получаете ValueError, потому что оператор df['Social Distancing Advisory'] == 'sah' дает серию логических значений - True для тех индексов, где значение соответствует 'sah', False в противном случае. Это именно то, что читается в сообщении об ошибке.

Следующий код может решить проблему с помощью метода pd.Series.replace, предоставив сопоставление необходимых изменений

import pandas as pd 

df = pd.read_excel('/Users/Arthur/Desktop/COVID-RA/state_data.xlsx')

df['Social Distancing Advisory'] = df['Social Distancing Advisory'].replace({
    "sah": "1",
    "sip": "0"
})
0 голосов
/ 29 апреля 2020

Вам не нужно повторять для замены строк. Вот пример.

    import pandas as pd 
    df = pd.read_excel('/Users/Arthur/Desktop/COVID-RA/state_data.xlsx')
    df['Social Distancing Advisory'] = df['Social Distancing Advisory'].replace('sah',1)
    df['Social Distancing Advisory'] = df['Social Distancing Advisory'].replace('sip',0)
    print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...