Если условие else не работает для столбца со значением None - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть выходная таблица для моего скрипта Python, которая, в зависимости от месяца, может иметь одну запись без значения или несколько записей с правильными значениями. Мой код конвертирует сумму зарплаты в формат $ и. Но если в столбце «Зарплата» указано «Нет», это не сработает. Как я могу условно перевести этот столбец зарплаты? Я предоставил образцы данных и то, что я пробовал до сих пор.

образец данных

d1 = {'name': ['john', 'tom'], 'Address': ['NY', 'CA'], 'Salary' : ['5000', '6000']}
df1 = pd.DataFrame(data = d1)

мой код

if df1['Salary'] is None:
    pass
else:
    df1['Salary'] = df1['Salary'].astype(int)
    df1['Salary'] = df1.apply(lambda x: "${:,}".format(x['Salary']), axis=1)

Это вывод, который я хочу

    Address Salary  name
0   NY      $5,000  john
1   CA      $6,000  tom

Но если в столбце оклада указано значение None, этот код не работает.

d2 = {'name': ['john', 'tom'], 'Address': ['NY', 'CA'], 'Salary' : ['5000', None]}
df2 = pd.DataFrame(data = d2)

Я получаю следующую ошибку:

TypeError: аргумент int () должен быть строкой, байтовидным объектом или числом, а не NoneType

Я понимаю ошибку, столбец не может быть одновременно целочисленным, а также иметь в нем значение None, не говоря уже о форматированном значении. Как я могу получить искомый вывод, даже если в моем столбце нет значения None?

1 Ответ

0 голосов
/ 02 ноября 2018

Применять функцию только к значению в столбце, которое не является None:

d2 = {'name': ['john', 'tom'], 'Address': ['NY', 'CA'], 'Salary' : ['5000', None]}
df2 = pd.DataFrame(data = d2)
df2.loc[df2['Salary'].notnull(), 'Salary'] = (df2.loc[df2['Salary'].notnull(), 'Salary']
                                            .apply(lambda x: "${:,}".format(int(x))))

#   name Address  Salary
# 0  john      NY  $5,000
# 1   tom      CA    None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...