Skip to main content
 首页 » 编程设计

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

2025年05月04日18小虾米

我有一个数据集,我想在其中规范化时间列。我通过使用 str contains 来执行此操作。我将通过创建 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) 

预期输出:

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 

请您参考如下方法:

您可以对- 进行拆分 并转换为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 

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