想为我的案例实现“to_datetime”功能

时间:2021-01-17 22:16:18

标签: python datetime timestamp

我想注册我的 dt0 列,该列的格式为“1/1/2020 12:00:00 PM”,并在 python 中使用“to_datetime”每 0.1 秒递增一次。

我尝试了以下操作,但出现错误“越界纳秒时间戳:1-01-01 00:00:00”。

df.dt0=pd.to_datetime(df.dt0)

是不是因为我的间隔太小了?有人可以推荐更好/有效的解决方案吗。

这是我想从表格中转换的列

<头>
没有 日期 时间
1 1/15/2020 下午 12:00:00
2 1/15/2020 下午 12:00:00
3 1/15/2020 下午 12:00:00
4 1/15/2020 下午 12:00:00
5 1/15/2020 下午 12:00:00
6 1/15/2020 下午 12:00:00
7 1/15/2020 下午 12:00:00
8 1/15/2020 下午 12:00:00
9 1/15/2020 下午 12:00:00
10 1/15/2020 下午 12:00:00
11 1/15/2020 下午 12:00:00
12 1/15/2020 下午 12:00:00

2 个答案:

答案 0 :(得分:0)

首先将连接的两列转换为日期时间:

df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'], 
                                format='%m/%d/%Y %I:%M:%S %p')
print (df)
    No.       Date         Time            datetime
0     1  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
1     2  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
2     3  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
3     4  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
4     5  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
5     6  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
6     7  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
7     8  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
8     9  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
9    10  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
10   11  1/15/2020  12:00:00 PM 2020-01-15 12:00:00
11   12  1/15/2020  12:00:00 PM 2020-01-15 12:00:00

然后添加重复 datetime 的计数器与 GroupBy.cumcount 乘以 100 并通过 to_timedelta 转换为时间增量:

df['datetime'] += pd.to_timedelta(df.groupby('datetime').cumcount().mul(100), unit='ms')
print (df)
    No.       Date         Time                datetime
0     1  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.000
1     2  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.100
2     3  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.200
3     4  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.300
4     5  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.400
5     6  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.500
6     7  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.600
7     8  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.700
8     9  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.800
9    10  1/15/2020  12:00:00 PM 2020-01-15 12:00:00.900
10   11  1/15/2020  12:00:00 PM 2020-01-15 12:00:01.000
11   12  1/15/2020  12:00:00 PM 2020-01-15 12:00:01.100

答案 1 :(得分:0)

为了让您的目标使用以下行

df['dt0'] = df.apply(lambda x : pd.to_datetime(x.Date+' '+x.Time),axis=1)

验证:

df

          Date         Time                 dt0
No.                                            
1    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
2    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
3    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
4    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
5    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
6    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
7    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
8    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
9    1/15/2020  12:00:00 PM 2020-01-15 12:00:00
10   1/15/2020  12:00:00 PM 2020-01-15 12:00:00
11   1/15/2020  12:00:00 PM 2020-01-15 12:00:00
12   1/15/2020  12:00:00 PM 2020-01-15 12:00:00

df.info()

df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 12 entries, 1 to 12
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   Date    12 non-null     object        
 1   Time    12 non-null     object        
 2   dt0     12 non-null     datetime64[ns]
dtypes: datetime64[ns](1), object(2)
memory usage: 384.0+ bytes

如所见,dt0datetime64[ns]

相关问题