我在pandas中有以下数据框架:
d = {'Student Name': ['Omar 17BE004', '17BE005 Hussain', '17BE006 Anwar Syed']}
df_test = pd.DataFrame(data=d)
df_test.head(3)
我试图创建一个名为Student_ID的新列,该列将由第一行中代表学生ID的学生名列中的字符串部分组成,如17BE004。为此,我使用以下代码:
df_test['Indices'] =df_test['Student Name'].str.find('1')
start=df_test.Indices
stop=start+7
myList_2=list(range(3))
for x in myList_2:
df_test['Student ID']=df_test['Student Name'].str.slice(start[x], stop[x],1)
但是,我在学生ID列中得到的输出是:Omar 17,17be005, 17BE006
当我只想要student ID为17BE004时,student ID列第一行的结果是Omar 17。似乎str.slice命令无法从学生姓名中切片正确的学生ID,如果在所需的字符串前面有不需要的字符串。比如学生号17BE004前面的名字Omar。谁能告诉我怎样才能得到一个正确的学生证件栏?
使用str.extract()
d = {'Student Name': ['Omar 17BE004', '17BE005 Hussain', '17BE006 Anwar Syed']}
df_test = pd.DataFrame(data=d)
df_test['Student ID'] = df_test['Student Name'].str.extract(r'(b1w{6})')
print(df_test)
Student Name Student ID
0 Omar 17BE004 17BE004
1 17BE005 Hussain 17BE005
2 17BE006 Anwar Syed 17BE006