如何在 python/pandas 中转换毫秒部分中带有逗号(,)的日期时间字符串?

问题描述 投票:0回答:2

我遇到以下问题:

我的数据中的日期时间列具有以下时间格式(列是“日期”

dd.mm.yyyy
和“时间”
hh:mm:ss.fff,f
):

01.03.2019  12:29:15.732,7

我环顾四周,但找不到处理逗号后面部分(毫秒之后)的格式选项。 一个对我没有帮助的来源: https://docs.python.org/2/library/datetime.html

我正在使用 python3 和

pd.read_csv()
读取 csv 文件。

我得到了以下解决方法,它截断了逗号及其后面的密码。

由于我的数据集中超过 50000 个字符串被截断,速度非常慢:

data = pd.read_csv('xyz.csv', sep=';', low_memory = False, parse_dates = [['Date', 'Time']], 
                   date_parser = lambda x, y : pd.to_datetime((x + ' ' + y)[:23], format='%d.%m.%Y %H:%M:%S.%f'))

我想要的是使用处理逗号的字符串格式,要么丢弃整个毫秒部分,要么将其正确转换为微秒。

旁注:对于 R,我只是使用了

"%d.%m.%Y %H:%M:%S"
,它丢弃了毫秒而没有抛出错误。

python pandas datetime string-conversion
2个回答
1
投票

ResidentSleeper 是正确的,您可以使用

pd.to_datetime()
并删除逗号。

import pandas as pd

data1 = {'Date': ['01.03.2019  12:29:15.732,7',
                  '01.03.2019  12:29:15.732,7',
                  '01.03.2019  12:29:15.732,7',
                  '01.03.2019  12:29:15.732,7'], 
        'Value': [1, 2, 3, 4]}

df1 = pd.DataFrame(data1)

df1['Date'] = pd.to_datetime(df1['Date'].str.replace(',', ''))

print(df1)

                        Date  Value
0 2019-01-03 12:29:15.732700      1
1 2019-01-03 12:29:15.732700      2
2 2019-01-03 12:29:15.732700      3
3 2019-01-03 12:29:15.732700      4

0
投票

如果多列的日期格式包含一个或多个逗号,您可以使用

DataFrame.replace
消除逗号,并将 regex 选项设置为 True:

     data = {'Date1': ['01.03.2019  12:29:15.732,7',
                  '01.03.2019  12:29:15.732,7',
                  '01.03.2019  12:29:15.732,7',
                  '01.03.2019  12:29:15.732,7'], 
              'Date2': ['01.04.2019  12:30:005.732,7',
                  '01.04.2019  12:31:15.732,7',
                  '01.04.2019  12:32:35.732,7',
                  '01.04.2019  12:33:45.732,7'], 
        Value': [1, 2, 3, 4]}

df1 = pd.DataFrame(data)

df1 = df1[['Date1','Date2']].replace(',', '', regex=True).applymap(pd.to_datetime)

print(df1)
                       Date1                      Date2
0 2019-01-03 12:29:15.732700 2019-01-04 12:30:05.732700
1 2019-01-03 12:29:15.732700 2019-01-04 12:31:15.732700
2 2019-01-03 12:29:15.732700 2019-01-04 12:32:35.732700
3 2019-01-03 12:29:15.732700 2019-01-04 12:33:45.732700


df1.dtypes
Date1    datetime64[ns]
Date2    datetime64[ns]
© www.soinside.com 2019 - 2024. All rights reserved.