我有一个数据框,我想在该列中搜索不同的字符串包含并将其替换为它们各自的备用名称

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)

ank*_*_91 5

您可以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)