首页 > 解决方案 > Pandas - 删除所有值都是特定字符串的行

问题描述

我有一个_df变量设置如下:

In [41]: _df
Out[41]: 
                                    0                                  1
0   validated_name1_conf66.67_err0.00  validated_name2_conf66.67_err0.00
1                                   -                                  -
2                                   -                                  -
3                                  Name                            Name2
4                                 XYZ                                ABC
5                                 XYZ                                ABC
6                                   -                                  -
7                                   -                                  -
8                                   -                                  -
9                                   -                                  -
10                                  -                                  -
11    

我想删除所有值都是特定的行string,在这个例子中,特定的字符串是-字符。

我可以通过下面的方法链来实现我想要实现的,我认为这是非常低效的

In [42]: (
    ...:  _df
    ...:  .T
    ...:  .replace('-', np.nan)
    ...:  .dropna(axis=1)
    ...:  .T
    ...: )
Out[42]: 
                                   0                                  1
0  validated_name1_conf66.67_err0.00  validated_name2_conf66.67_err0.00
3                                 Name                            Name2
4                                XYZ                                ABC
5                                XYZ                                ABC

在上面的方法链接中,我使用转置轴.T,然后使用.replace方法将所有-字符串替换为np.nan值,然后使用删除它们dropna(),最后用.T.

我尝试使用更直接的方式,例如以下结果:

In [43]: _df[_df.values != '-']
Out[43]: 
                                   0                                  1
0  validated_name1_conf66.67_err0.00  validated_name2_conf66.67_err0.00
0  validated_name1_conf66.67_err0.00  validated_name2_conf66.67_err0.00
3                                 Name                            Name2
3                                 Name                            Name2
4                                XYZ                                ABC
4                                XYZ                                ABC
5                                XYZ                                ABC
5                                XYZ                                ABC

我知道迭代列方法,但就我而言,它并不完全适合我想要实现的目标。

问题

有没有更有效的方法来实现我想要实现的目标,而不是使用我在从顶部开始的第二个代码上使用的方法链接?

标签: pandasduplicatesdata-cleaning

解决方案


哦,我想我已经找到了解决方案:

In [ ]: _df[_df.values != '-'].drop_duplicates()
Out[ ]: 
                                   0                                  1
0  validated_name1_conf66.67_err0.00  validated_name2_conf66.67_err0.00
3                                Name                               Name2
4                                XYZ                                ABC
5                                XYZ                                ABC

但是,我不确定这是否是处理此问题的最有效方法,因为数据超过 100k~ish 行。建议将不胜感激!


推荐阅读