python - 熊猫数据框中的条件删除
问题描述
我想删除任何行,包括数据框中的特定字符串。
我想删除电子邮件地址异常的数据行(带.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]'
解决方案
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]]
推荐阅读
- oop - D中类的比较运算符重载?
- android - 如何在 Room @Query 中使用参数字段?
- ios - RxSwift:结合两个网络请求返回一个值
- powerbi - Power BI:季度环比百分比变化
- google-apps-script - 日期过后删除 Google 表格中的一行
- firebase - 使用 POST 将单个文件自动导入到 Firestore:https://firestore.googleapis.com/v1beta1/{database}/documents.commit?
- php - 如何为 php/html 中的每个评论设置单独的背景颜色?
- git - 如何告诉 PyCharm 不要将 node_modules 发送到 git repo?
- python - 在 Windows 中使用 python3 时,如果不按回车就不可能从屏幕上输入单个字符,这仍然是真的吗?
- java - 即使能够从 cmd 的“adb devices”中获取 udid,Appium Server 也无法检测到连接的设备