如何在数据帧python中过滤出格式错误的单元格
我想写一个函数或使用一个命令来检查ID是否遵循特定的格式,即ID必须是9位长度,第一位数字必须是字母表。如果没有,那么我想过滤掉与该ID号对应的行。例如,我有一个数据帧(称为df): 使用如何在数据帧python中过滤出格式错误的单元格,python,pandas,dataframe,filtering,Python,Pandas,Dataframe,Filtering,我想写一个函数或使用一个命令来检查ID是否遵循特定的格式,即ID必须是9位长度,第一位数字必须是字母表。如果没有,那么我想过滤掉与该ID号对应的行。例如,我有一个数据帧(称为df): 使用df=df[df['ID'].str.len()==9],我可以过滤掉最后一行以获得 ID status 0 B12345678 graduated 1 C12345678 graduated 2 A12345678 in pr
df=df[df['ID'].str.len()==9]
,我可以过滤掉最后一行以获得
ID status
0 B12345678 graduated
1 C12345678 graduated
2 A12345678 in progress
3 111111111 unknown
4 A3B111111 unknown
但是第3行和第4行仍然不是正确的格式,我也需要过滤掉它。这样做的有效方法是什么
我试过了
df = df[df['ID'].isdigit()]
但我得到了一个错误,它说:“'Series'对象没有属性'isdigit'”
我的数据帧代码是:
students = [('ID', ['B12345678', 'C12345678', 'A12345678','111111111','A3B111111','A12']),
('status', ['graduated', 'graduated','in progress','unknown','unknown','unknown'])
]
df = pd.DataFrame.from_items(students)
与相应的正则表达式一起使用:
In [4]: df[df['ID'].str.match(r'[A-Z]\d{8}')]
Out[4]:
ID status
0 B12345678 graduated
1 C12345678 graduated
2 A12345678 in progress
或
如果第一个字母也可以小写谢谢。如果这些数据流进来,我该怎么做?例如,如何仅检查一行或一个ID元素(即B12345678)?当我试着只检查一个元素时,我不断得到一个错误,它说:“str”对象没有属性“str”
In [4]: df[df['ID'].str.match(r'[A-Z]\d{8}')]
Out[4]:
ID status
0 B12345678 graduated
1 C12345678 graduated
2 A12345678 in progress
df[df['ID'].str.match(r'[A-Z]\d{8}', case=False)]