python - 查找在一列中不以大写字母开头的条目
问题描述
我有一个如下的数据框:
df = {'id': [1,2,3,4,5,6,7], 'name': [Zeke,such,a,Maya,Derek,an,the]}
顺便说一句,这是一个巨大的数据框。现在我想找到错误的名称列表,例如“such”、“a”、“an”、“the”。我想删除它们并有一个像这样的df:
df_new= {'id': [1,4,5], 'name': [Zeke,Maya,Derek]}
我已经尝试通过以下方式查找每个特定的错误名称:
df.query('name=="a"')
df1.query('name=="an"')
df1.query('name=="the"')
问题是,我不知道有多少不同的错误名称存在。正确名称和错误名称之间的唯一区别是第一个字母(小写或大写)。
任何帮助表示赞赏。
解决方案
用于istitle
检查第一个字符是否为大写,并过滤boolean indexing
:
df = df[df['name'].str.istitle()]
或通过索引获取第一个值并通过以下方式检查isupper
:
df = df[df['name'].str[0].str.isupper()]
为了获得更好的性能,它没有缺失值使用列表理解:
df = df[[x.istitle() for x in df['name']]]
df = df[[x[0].isupper() for x in df['name']]]
print (df)
id name
0 1 Zeke
3 4 Maya
4 5 Derek
推荐阅读
- java - Eclipse(2020 09) Java 安装问题 || 视窗 10 操作系统
- c - strcat 不会在同一行加入字符串(在 c 中)
- flutter - Flutter,阴影裁剪系统如何工作?
- python - 如何在 python 上的 vim 中导入一个类?
- reactjs - TypeError: Object(...) 不是函数(匿名函数)
- vba - 创建一个循环来迭代所有成功/失败事件的组合
- selenium-webdriver - 有没有办法通过 webdriver 验收测试来做“如果我看到,那么……”?
- android - 如果我向 10% 的用户推出更新,并再次更新应用程序,它会再次选择相同的 10% 用户吗?
- c++ - 编译旧 C++ 库
- magento - 如何在magento 2中的UiComponent中获取目录产品