如何将“未知格式”字符串转换为 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'])