Условное удаление в pandas dataframe - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу удалить все строки, включая конкретную строку в кадре данных.

Я хочу удалить строки данных с ненормальным адресом электронной почты (с .jpg)

Вот мой код, что с ним не так?

df = pd.DataFrame({'email':['abc@gmail.com', 'cde@gmail.com', 'ghe@ss.jpg', 'sldkslk@sss.com']})

df

             email
0    abc@gmail.com
1    cde@gmail.com
2       ghe@ss.jpg
3  sldkslk@sss.com

for i, r in df.iterrows():
    if df.loc[i,'email'][-3:] == 'com':
        df.drop(df.index[i], inplace=True) 

Traceback (most recent call last):

  File "<ipython-input-84-4f12d22e5e4c>", line 2, in <module>
    if df.loc[i,'email'][-3:] == 'com':

  File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1472, in __getitem__
    return self._getitem_tuple(key)

  File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 870, in _getitem_tuple
    return self._getitem_lowerdim(tup)

  File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 998, in _getitem_lowerdim
    section = self._getitem_axis(key, axis=i)

  File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1911, in _getitem_axis
    self._validate_key(key, axis)

  File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1798, in _validate_key
    error()

  File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1785, in error
    axis=self.obj._get_axis_name(axis)))

KeyError: 'the label [2] is not in the [index]'

1 Ответ

0 голосов
/ 01 сентября 2018

IIUC, вы можете сделать это, вместо того, чтобы перебирать свой кадр с iterrows:

df = df[df.email.str.endswith('.com')]

, который возвращает:

>>> df
             email
0    abc@gmail.com
1    cde@gmail.com
3  sldkslk@sss.com

Или, для больших фреймов данных, иногда быстрее не использовать методы str, предоставляемые pandas, а просто сделать это в простом понимании списка с помощью встроенных строковых методов python:

df = df[[i.endswith('.com') for i in df.email]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...