use*_*166 1 python replace pandas
我有一个要标准化时间列的数据集。我正在通过使用str包含执行。我可以通过创建3个df并在每个df中找到这些值来完成此操作,但是我想知道是否有更好的方法。
输入:
Finance_ID Short_Name School_Hours
29161 LASALLE 09:00 AM-04:00 PM
23531 HAMMOND 09:00 AM-04:00 PM
23031 EARLE 09:00 AM-04:00 PM
25111 REINBERG 09:00 AM-04:00 PM
23771 HERZL 09:00 AM-04:00 PM
30051 BEARD 07:30 AM - 02:30 PM
22921 AZUELA 08:00 AM - 03:00 PM
29051 ERICSON 09:00 AM-04:00 PM
30101 SALAZAR 09:00 AM-04:00 PM
22321 BRIDGE 08:00 AM-3:00 PM(PK-4),7:45 AM-2:45 PM(5-8)
26541 WOODSON 09:00 AM-04:00 PM
22931 DENEEN 09:00 AM-04:00 PM
25811 WENTWORTH 09:00 AM-04:00 PM
25361 SHIELDS 08:00 AM - 03:00 PM
29371 SABIN 09:00 AM-04:00 PM
23011 DRAKE 09:00 AM-04:00 PM
Current code:
s=df[df['School_Hours'].str.contains('7:',na=False)].replace(True,7)
e=df[df['School_Hours'].str.contains('8:',na=False)].replace(True,8)
n=df[df['School_Hours'].str.contains('9:',na=False)].replace(True,9)
Run Code Online (Sandbox Code Playgroud)
预期产量:
Finance_ID Short_Name School_Hours
29161 LASALLE 9
23531 HAMMOND 9
23031 EARLE 9
25111 REINBERG 9
23771 HERZL 9
30051 BEARD 7
22921 AZUELA 8
29051 ERICSON 9
30101 SALAZAR 9
22321 BRIDGE 7
26541 WOODSON 9
22931 DENEEN 9
25811 WENTWORTH 9
25361 SHIELDS 8
29371 SABIN 9
23011 DRAKE 9
Run Code Online (Sandbox Code Playgroud)
您可以split打开-并转换为,pd.to_datetime然后调用dt.hour:
pd.to_datetime(df.School_Hours.str.split('-').str[0]).dt.hour
#df['School_Hours']=pd.to_datetime(df.School_Hours.str.split('-').str[0]).dt.hour
Run Code Online (Sandbox Code Playgroud)
0 9
1 9
2 9
3 9
4 9
5 7
6 8
7 9
8 9
9 8
10 9
11 9
12 9
13 8
14 9
15 9
Run Code Online (Sandbox Code Playgroud)