Панды - отбрасывать строки, для которых все значения являются определенной строкой - PullRequest
0 голосов
/ 29 июня 2018

У меня есть переменная _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

Мне известно о методе итерации по столбцам, но в моем случае он не будет полностью соответствовать тому, чего я хотел бы достичь.

Вопрос

Есть ли более эффективный способ достижения того, чего я хочу достичь, вместо использования цепочки методов, которую я использовал для второго кода сверху?

1 Ответ

0 голосов
/ 29 июня 2018

О, я думаю, что я уже нашел решение:

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

Однако я не уверен, является ли это наиболее эффективным способом решения этой проблемы, поскольку данные выходят за рамки 100 тысяч строк. Предложения будут оценены!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...