Pandas和值错误:时间数据'0'与格式不匹配

fhg3lkii  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(231)

我不知道为什么会出现错误“ValueError:时间数据“0”与格式“%d.%m.%Y %H:%M”(匹配)”(或..“%d.%m.%Y”)不匹配。因此,我有一个测试 Dataframe :

Date      DateCP   Time    kWh                DT
0   01.11.2022  01.11.2022  01:00  0.693  01.11.2022 01:00
1   01.11.2022  01.11.2022  02:00  0.675  01.11.2022 02:00
2   01.11.2022  01.11.2022  03:00  1.044  01.11.2022 03:00

为了绝对肯定(以下建议在这里)我运行在DateCP和DT:

df['DateCP'] = df['DateCP'].apply(unidecode) 
df['DT'] = df['DT'].apply(unidecode)

但发行了

df['DateCP'] = pd.to_datetime(df['DateCP'], format='%d.%m.%Y') 
or 
df['DT'] = pd.to_datetime(df['DT'], format='%d.%m.%Y %H:%M')
or
df['Date'] = df['Date'].apply(lambda x:datetime.strptime(x,'%d.%m.%Y'))

会导致上述错误。只有在加入errors ='coorce '时才会发生转换,并提供预期的结果:

Date     DateCP   Time    kWh                  DT
0   01.11.2022 2022-11-01  01:00  0.693 2022-11-01 01:00:00
1   01.11.2022 2022-11-01  02:00  0.675 2022-11-01 02:00:00
2   01.11.2022 2022-11-01  03:00  1.044 2022-11-01 03:00:00

为什么需要强制?

qhhrdooz

qhhrdooz1#

因为数据错误这里日期时间与数字0混合,所以如果添加errors='coerce'参数,Pandas会将列转换为日期时间,其中NaT表示不可解析日期
您可以检查它:

print (df)
         Date      DateCP   Time    kWh                DT
0  01.11.2022  01.11.2022  01:00  0.693  01.11.2022 01:00
1  01.11.2022           1  02:00  0.675  01.11.2022 02:00
2  01.11.2022  01.11.2022  03:00  1.044  01.11.2022 03:00

df['new'] = pd.to_datetime(df['DateCP'], format='%d.%m.%Y', errors='coerce')

print (df.loc[df['new'].isna(), ['DateCP','new']])

  DateCP new
1      1 NaT

最后,DataFrames看起来:

df['DateCP'] = pd.to_datetime(df['DateCP'], format='%d.%m.%Y', errors='coerce')
print (df)

         Date     DateCP   Time    kWh                DT
0  01.11.2022 2022-11-01  01:00  0.693  01.11.2022 01:00
1  01.11.2022        NaT  02:00  0.675  01.11.2022 02:00
2  01.11.2022 2022-11-01  03:00  1.044  01.11.2022 03:00

print (df.dtypes)
Date              object
DateCP    datetime64[ns]
Time              object
kWh              float64
DT                object
dtype: object

编辑:如果需要删除所有具有缺失值的行,请使用DataFrame.dropna

df['DateCP'] = pd.to_datetime(df['DateCP'], format='%d.%m.%Y', errors='coerce')
df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y', errors='coerce')
df['DT'] = pd.to_datetime(df['DT'], format='%d.%m.%Y %H:%M', errors='coerce')

df = df.dropna(subset=['DateCP','Date','DT'])

相关问题