Pandas Как отфильтровать нулевые значения и нулевые значения в одном столбце - PullRequest
0 голосов
/ 26 апреля 2020

Я пытался исправить этот синтаксис, но безуспешно. Буду признателен, если кто-нибудь сможет мне помочь.

1    vat.loc[(vat['Sum of VAT'].isnull()) &
2            (vat['Sum of VAT'] == 0) &
3            (vat['Comment'] == 'Transactions 0DKK') &
4            (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'
5    vat[vat["Comment"] == "Travel bill"]

Проблема заключается в первой и второй строчках. Я получаю пустой фрейм данных в качестве вывода из-за фильтра для нулевых значений, и нулевые (0) значения в одном столбце не происходят одновременно. Есть ли лучший способ объединить строки 1 и 2, чтобы я получил желаемый результат. Если бы я удалил первую или вторую строку, я бы получил вывод, но он не был бы желаемым. Я пытался использовать метод isin (), но он не работает для меня на 100%. В противном случае весь код работает отлично, но как объединить первую и вторую строки? Спасибо!

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Существует два подхода, с помощью которых вы можете решить эту проблему:

a) Вы можете заменить нули на NaN, а затем дополнительно отфильтровать значения NULL. Я хочу сказать, что-то вроде

vat['Sum of VAT'] = vat['Sum of VAT'].replace(0, np.nan)
1 vat.loc[(vat['Sum of VAT'].isnull()) &
3            (vat['Comment'] == 'Transactions 0DKK') &
4            (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'

б) Или вы можете просто использовать метод isin:

1 vat.loc[(vat['Sum of VAT'].isin(0, np.nan)) &
3            (vat['Comment'] == 'Transactions 0DKK') &
4            (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'

Используя любой из двух приведенных выше аппроксимаций, вы можете игнорируйте L # 2 из вашего кода.

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

Причиной пустого фрейма данных действительно являются первые два условия, столбец Sum of VAT не может быть пустым и равным 0 одновременно, поэтому условие & следует заменить на | как -

vat.loc[((vat['Sum of VAT'].isnull()) | (vat['Sum of VAT'] == 0)) &
        (vat['Comment'] == 'Transactions 0DKK') &
        (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'

ИЛИ используйте isin как -

vat.loc[(vat['Sum of VAT'].isin([np.nan, 0])) &
        (vat['Comment'] == 'Transactions 0DKK') &
        (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'
...