Я хочу найти определенную строку в кадре данных и после нахождения строки я хочу исключить эту конкретную строку из кадра данных - PullRequest
0 голосов
/ 27 сентября 2019

Я работаю над финансовыми отчетами в отчетах, и мне нужно исключить даты, валюту и единицы измерения из кадра данных.

Я пытался исключить строки, указав столбец и строку.

df = df[~df['A'].isin(['As of December 31, 2018'])]

Я не уверен, в каком столбце появится эта конкретная строка, поэтому я хочу найти 'As of December 31, 2018', который уникален, и найти его в фрейме данных, и как только он будет найден, я хочу исключить эту конкретную строку из фрейма данных.

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете проверить все поля, чтобы найти, что любое из них содержит указанную вами строку, используя функцию any() и применить ее ко всем строкам кадра данных с помощью функции pandas apply():

import pandas as pd
import json

data_json = [
    {
    'field_1': 'As of December 31, 2018',
    'field_2': '1',
    'field_3': '2'
},
{
    'field_1': '3',
    'field_2': '4',
    'field_3': '5'

},
{
    'field_1': '6',
    'field_2': 'As of December 31, 2018',
    'field_3': '7'

},
{
    'field_1': '8',
    'field_2': '9',
    'field_3': '10'
},
{
    'field_1': '11',
    'field_2': '12',
    'field_3': 'As of December 31, 2018'   
}]

data = pd.read_json(json.dumps(data_json))
print(data)

Вывод:

                   field_1                  field_2                  field_3
0  As of December 31, 2018                        1                        2
1                        3                        4                        5
2                        6  As of December 31, 2018                        7
3                        8                        9                       10
4                       11                       12  As of December 31, 2018

После этого, используя apply() + any():

data_filtered = data[~data.apply(lambda x: any([True for elem in x if elem == 'As of December 31, 2018']), axis=1)]
print(data_filtered)

Вывод:

  field_1 field_2 field_3
1       3       4       5
3       8       9      10

ОБНОВЛЕНИЕ:

Если вы хотите удалить строки, основанные на нескольких значениях, вы можете изменить свой код следующим образом:

data_filtered = data[~data.apply(lambda x: any([True for elem in x if elem in ['As of December 31, 2018', 'As of March 31, 2018']]), axis=1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...