想象一下,我有一个名为courses
的列,其中一些只是数字,有些是按字母顺序排列,有些是两者。这些对应于特定部门的课程。想象一下courses
中的所有值都是字符串,可能有空值。我想a)存储仅数字的课程b)存储仅按字母顺序排列的课程或c)存储以数字结尾的课程(但我们不关心它们是否包含数字或字母)。我怎么能利用熊猫的能力呢?
想象一下,courses
看起来像这样,但更长。
Courses
------------------------
181
71
CS 143
Machine Learning
Programming Languages 79
115
157 Neural Networks
所以a)将包含181,71,115 b)将包含机器学习,c)将包含编程语言79,CS 143.
我可以想象使用非熊猫方法这样做的时间更长,但我想大熊猫可以帮助我做到这一点。例如,对于最后一项任务,我可以按照以下方式做一些事情,但我想知道是否有更好的方法:
c = []
for course in courses:
course = course.strip()
if course:
length = len(course) - 1
if (course[length]).isdigit():
c.append(course)
答案 0 :(得分:2)
使用contains
作为布尔掩码:
m1 = df['Courses'].str.contains('^\d+$')
m2 = df['Courses'].str.contains('\d')
m3 = df['Courses'].str.contains('^\D.*\d$')
df1 = df[m1]
print (df1)
Courses
0 181
1 71
5 115
df2 = df[~m2]
print (df2)
Courses
3 Machine Learning
df3 = df[m3]
print (df3)
Courses
2 CS 143
4 Programming Languages 79
如果您需要单个数据帧作为输出,则可以使用单个正则表达式:
df[df.Courses.str.contains(r'^(?:\d+|[a-zA-Z\s]+|.*\d)$')]
Courses
0 181
1 71
2 CS 143
3 Machine Learning
4 Programming Languages 79
5 115