python - 我想在数据框中找到一个特定的字符串,在找到该字符串后,我想从数据框中排除该特定行
问题描述
我正在处理报告中的财务报表,我需要从数据框中排除日期、货币和单位。
我试图通过给出列和字符串来排除行。
df = df[~df['A'].isin(['As of December 31, 2018'])]
我不确定这个特定的字符串会出现在哪一列,所以我想找到'As of December 31, 2018'
哪个是唯一的并在数据框中找到它,一旦找到,我想从数据框中排除该特定行。
解决方案
您可以使用函数检查所有字段以发现其中任何一个包含您指定的字符串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)]
推荐阅读
- scala - scala中错误的顶级声明声明
- visual-studio-code - 如何关闭 ESLint 规则以便代码编译?
- python - 如何为 pandas.cut 函数定义(和命名)间隔?
- python - 从另一个文件导入变量会产生错误
- google-apps-script - 将值从活动工作表复制到另一个工作表
- python - 错误; 字符串索引必须是整数,很确定值是整数
- sql - SQL - 按季度最后一天分组
- django - 使用 filter_horizontal,有没有办法控制小部件上显示的内容?
- opencv - Gstreamer RTP传输视频+文字
- python - 带有应用于 groupby 的 bin 的 pandas value_counts 会产生不正确的结果