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