首页 > 解决方案 > 我想在数据框中找到一个特定的字符串,在找到该字符串后,我想从数据框中排除该特定行

问题描述

我正在处理报告中的财务报表,我需要从数据框中排除日期、货币和单位。

我试图通过给出列和字符串来排除行。

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

我不确定这个特定的字符串会出现在哪一列,所以我想找到'As of December 31, 2018'哪个是唯一的并在数据框中找到它,一旦找到,我想从数据框中排除该特定行。

标签: pythonpandas

解决方案


您可以使用函数检查所有字段以发现其中任何一个包含您指定的字符串any(),并使用 pandasapply()函数将其应用于数据框的所有行:

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)]

推荐阅读