Python 在dataframe列中存储仅按数字或字母顺序排列的值?

Python 在dataframe列中存储仅按数字或字母顺序排列的值?,python,pandas,dataframe,filter,Python,Pandas,Dataframe,Filter,假设我有一个名为课程的专栏,其中有些只是数字,有些是字母,有些两者都是。这些课程对应于特定部门内的课程。假设课程中的所有值都是字符串,可能存在空值。我想a)存储的课程只有数字b)存储的课程只有字母或c)存储的课程以数字结尾(但我们不在乎它们是否包含数字或字母)。我如何利用我的能力做到这一点 想象一下,课程看起来像这样,但要长得多 Courses ------------------------ 181 71 CS 143 Machine Learning Programming Language

假设我有一个名为
课程
的专栏,其中有些只是数字,有些是字母,有些两者都是。这些课程对应于特定部门内的课程。假设
课程
中的所有值都是字符串,可能存在空值。我想a)存储的课程只有数字b)存储的课程只有字母或c)存储的课程以数字结尾(但我们不在乎它们是否包含数字或字母)。我如何利用我的能力做到这一点

想象一下,
课程
看起来像这样,但要长得多

Courses
------------------------
181
71
CS 143
Machine Learning
Programming Languages 79
115
157 Neural Networks
因此a)将包含181、71115 b)将包含机器学习,c)将包含编程语言79、cs143

我可以想象用非熊猫的方法做这件事的时间更长,但我想熊猫可以在这方面起到很大的作用。例如,对于最后一项任务,我可以按照以下思路做一些事情,但我想知道是否有更好的方法:

c = []
for course in courses:
    course = course.strip()
    if course:
        length = len(course) - 1
        if (course[length]).isdigit():
            c.append(course)
用于布尔掩码:

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
用于布尔掩码:

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