python column_python – 将Pandas Column转换为DateTime II

博主在尝试将包含DateTime字符串的Pandas列转换为日期时间格式时遇到错误。问题在于数据集中存在24小时格式的错误数据。解决方案是使用字符串替换方法修正小时值,将'24:'替换为'00:',然后应用`pd.to_datetime()`函数进行转换。" 133850370,7337247,对话引导型AI助手情感识别:深度学习与实践,"['自然语言处理', '人工智能', '机器学习', '深度学习', 'Python']
摘要由CSDN通过智能技术生成

我试图将DateTime字符串列转换为Pandas可理解的日期时间格式.当然,我已经谷歌搜索并尝试了几种解决方案.

Convert Pandas Column to DateTime

这个对我来说似乎是最令人鼓舞的,但两种推荐的方式对我的数据集都不起作用.

细节:

数据集名称:co,

列:索引列,

格式:15.07.2015 24:00,之前或之后不再有空白.

我的努力:

co['newdate'] = pd.to_datetime(co.index, format='%d.%m.%Y %H:%M')

在我将Index-col转换为名为“Datum”的“普通”列后,我尝试了下一个

co['newdate'] = co['Datum'].apply(lambda x: dt.datetime.strptime(x,'%d.%m.%Y %H:%M'))

错误:时间数据’15 .07.2015 24:00’与格式’%d.%m.%Y%H:%M’不匹配

两种解决方案都会出现此错误.有人有想法吗?

解决方法:

您的格式字符串是正确的,但您的数据不是,24不是有效的小时组件,因此错误:

In [138]:

pd.to_datetime('15.07.2015 24:00', format = '%d.%m.%Y %H:%M')

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in _convert_listlike(arg, box, format)

329 try:

--> 330 values, tz = tslib.datetime_to_datetime64(arg)

331 return DatetimeIndex._simple_new(values, None, tz=tz)

pandas\tslib.pyx in pandas.tslib.datetime_to_datetime64 (pandas\tslib.c:23823)()

TypeError: Unrecognized value type:

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last)

in ()

----> 1 pd.to_datetime('15.07.2015 24:00', format = '%d.%m.%Y %H:%M')

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in to_datetime(arg, errors, dayfirst, utc, box, format, exact, coerce, unit, infer_datetime_format)

343 return _convert_listlike(arg, box, format)

344

--> 345 return _convert_listlike(np.array([ arg ]), box, format)[0]

346

347 class DateParseError(ValueError):

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in _convert_listlike(arg, box, format)

331 return DatetimeIndex._simple_new(values, None, tz=tz)

332 except (ValueError, TypeError):

--> 333 raise e

334

335 if arg is None:

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in _convert_listlike(arg, box, format)

305 try:

306 result = tslib.array_strptime(

--> 307 arg, format, exact=exact, coerce=coerce

308 )

309 except (tslib.OutOfBoundsDatetime):

pandas\tslib.pyx in pandas.tslib.array_strptime (pandas\tslib.c:39900)()

ValueError: time data '15.07.2015 24:00' does not match format '%d.%m.%Y %H:%M' (match)

而23:59将解析罚款

In [139]:

pd.to_datetime('15.07.2015 23:59', format = '%d.%m.%Y %H:%M')

Out[139]:

Timestamp('2015-07-15 23:59:00')

您需要将0替换为0才能进行解析:

In [140]:

pd.to_datetime('15.07.2015 00:00', format = '%d.%m.%Y %H:%M')

Out[140]:

Timestamp('2015-07-15 00:00:00')

所以你可以做的是调用vectorised str.replace来修复这些错误的小时值:

In [144]:

df = pd.DataFrame({'date':['15.07.2015 24:00']})

print(df)

df['date'] = df['date'].str.replace('24:','00:')

print(df)

pd.to_datetime(df['date'], format = '%d.%m.%Y %H:%M')

date

0 15.07.2015 24:00

date

0 15.07.2015 00:00

Out[144]:

0 2015-07-15

Name: date, dtype: datetime64[ns]

所以在你的情况下你可以这样做:

co.index = co.index.str.replace('24:','00:')

然后像以前一样转换来源:https://www.icode9.com/content-1-494451.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值