Могу ли я использовать pd.drop в цепочке методов для удаления определенных строк? - PullRequest
3 голосов
/ 27 сентября 2019

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

Удаление строк происходит сразу после появления фрейма данных:

import pandas as pd

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
print(df1)

# drop the entries that match "2"
df1 = df1[df1['A'] !=2]
print(df1)

Однако я хотел бы сделать это во время создания фрейма данных:

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
#        .drop(lambda x: x['A']!=2)
        )
print(df2)

Комментированная строка не работает, но, возможно, есть правильный способ сделать это.Благодарен за любой вклад.

Ответы [ 3 ]

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

Использование DataFrame.loc с вызываемым :

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
        .loc[lambda x: x['AA']!=2]
        )

Или DataFrame.query:

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
        .query("AA != 2")
        )
print(df2)
   AA  B
0   1  5
2   3  3
1 голос
/ 27 сентября 2019

Вы можете использовать DataFrame.apply с DataFrame.dropna :

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
       .apply(lambda x: x if x['AA'] !=2 else np.nan,axis=1).dropna()
        )
print(df2)


    AA    B
0  1.0  5.0
2  3.0  3.0
0 голосов
/ 27 сентября 2019

Может быть, вы можете попробовать выделение с помощью ".loc" в конце кода вашей строки определения.

...