如何将“未知格式”字符串转换为 Python 中的时间
how to Convert “unknown format” strings to time in Python
我正在尝试仅将“开始时间”格式的列更改为时间格式,但是当我使用以下代码时,我发现了以下错误消息“未知字符串格式:年度”
enter image description here
FP_sheet=pd.read_excel(r"C:\Users\Mahmoud.Bader\Desktop\FP Attendance V1.6 Apr 22.xlsx","Attendance").fillna("")
FP_sheet['Start Shift']=pd.to_datetime(FP_sheet['Start Shift']).dt.strftime('%H:%M %p')
FP_sheet.head()
您必须过滤行并仅获取带有日期的行 - 稍后仅使用这些行
喜欢
mask = (FP_sheet['Date'] != "Off day")
FP_sheet['Date'][mask] = pd.to_datetime(FP_sheet['Date'][mask]).dt.date
如需更多过滤器,您可以使用 &
作为 "and"
、|
作为 "or"
、~
作为 not
mask = (df['Date'] != 'Off day') & (df['Date'] != 'Annual')
mask = ~( (df['Date'] == 'Off day') | (df['Date'] == 'Annual') )
最小工作示例
import pandas as pd
data = {
'Date': [
'2022.05.26 18:00',
'Off day',
'2022.05.16 18:00',
'Annual',
'2022.05.06 18:00',
],
}
df = pd.DataFrame(data)
print('\n--- before ---\n')
print(df)
mask = (df['Date'] != 'Off day') & (df['Date'] != 'Annual')
#mask = ~( (df['Date'] == 'Off day') | (df['Date'] == 'Annual') )
df['Date'][mask] = pd.to_datetime(df['Date'][mask]).dt.date
print('\n--- after ---\n')
print(df)
结果:
-- before ---
Date
0 2022.05.26 18:00
1 Off day
2 2022.05.16 18:00
3 Annual
4 2022.05.06 18:00
--- after ---
Date
0 2022-05-26
1 Off day
2 2022-05-16
3 Annual
4 2022-05-06
编辑:
您还可以使用 .apply()
到 运行 函数来检查它是否是文本 - 和 return 这个文本,或者它是否是日期时间 - 和 return日期
import pandas as pd
import datetime
# --- functions ---
def convert(item):
if item in ['Off day', 'Annual']:
return item
else:
return datetime.datetime.strptime(item, '%Y.%m.%d %H:%M').date()
# --- main ---
data = {
'Date': [
'2022.05.26 18:00',
'Off day',
'2022.05.16 18:00',
'Annual',
'2022.05.06 18:00',
],
}
df = pd.DataFrame(data)
print('\n--- before ---\n')
print(df)
df['Date'] = df['Date'].apply(convert)
print('\n--- after ---\n')
print(df)
编辑:
如果你想检查列表
mask = ~df['Date'].isin(['Off day', 'Annual'])
我正在尝试仅将“开始时间”格式的列更改为时间格式,但是当我使用以下代码时,我发现了以下错误消息“未知字符串格式:年度”
enter image description here
FP_sheet=pd.read_excel(r"C:\Users\Mahmoud.Bader\Desktop\FP Attendance V1.6 Apr 22.xlsx","Attendance").fillna("")
FP_sheet['Start Shift']=pd.to_datetime(FP_sheet['Start Shift']).dt.strftime('%H:%M %p')
FP_sheet.head()
您必须过滤行并仅获取带有日期的行 - 稍后仅使用这些行
喜欢
mask = (FP_sheet['Date'] != "Off day")
FP_sheet['Date'][mask] = pd.to_datetime(FP_sheet['Date'][mask]).dt.date
如需更多过滤器,您可以使用 &
作为 "and"
、|
作为 "or"
、~
作为 not
mask = (df['Date'] != 'Off day') & (df['Date'] != 'Annual')
mask = ~( (df['Date'] == 'Off day') | (df['Date'] == 'Annual') )
最小工作示例
import pandas as pd
data = {
'Date': [
'2022.05.26 18:00',
'Off day',
'2022.05.16 18:00',
'Annual',
'2022.05.06 18:00',
],
}
df = pd.DataFrame(data)
print('\n--- before ---\n')
print(df)
mask = (df['Date'] != 'Off day') & (df['Date'] != 'Annual')
#mask = ~( (df['Date'] == 'Off day') | (df['Date'] == 'Annual') )
df['Date'][mask] = pd.to_datetime(df['Date'][mask]).dt.date
print('\n--- after ---\n')
print(df)
结果:
-- before ---
Date
0 2022.05.26 18:00
1 Off day
2 2022.05.16 18:00
3 Annual
4 2022.05.06 18:00
--- after ---
Date
0 2022-05-26
1 Off day
2 2022-05-16
3 Annual
4 2022-05-06
编辑:
您还可以使用 .apply()
到 运行 函数来检查它是否是文本 - 和 return 这个文本,或者它是否是日期时间 - 和 return日期
import pandas as pd
import datetime
# --- functions ---
def convert(item):
if item in ['Off day', 'Annual']:
return item
else:
return datetime.datetime.strptime(item, '%Y.%m.%d %H:%M').date()
# --- main ---
data = {
'Date': [
'2022.05.26 18:00',
'Off day',
'2022.05.16 18:00',
'Annual',
'2022.05.06 18:00',
],
}
df = pd.DataFrame(data)
print('\n--- before ---\n')
print(df)
df['Date'] = df['Date'].apply(convert)
print('\n--- after ---\n')
print(df)
编辑:
如果你想检查列表
mask = ~df['Date'].isin(['Off day', 'Annual'])