我遇到以下问题:
我的数据中的日期时间列具有以下时间格式(列是“日期”
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"
,它丢弃了毫秒而没有抛出错误。
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
如果多列的日期格式包含一个或多个逗号,您可以使用
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]