gpt4 book ai didi

python - 如何更改日期而不是数据框列中时间戳的时间?

转载 作者:行者123 更新时间:2023-12-01 11:20:56 26 4
gpt4 key购买 nike

python 3.6.0

我正在导入一个带有 Unix 时间戳的文件。
我将它们转换为 Pandas 日期时间并四舍五入为 10 分钟(12:00、12:10、12:20,...)

数据是在指定时间段内收集的,但来自不同的日期。
对于我们的分析,我们希望在进行重采样之前将所有日期更改为相同的日期。

目前我们有一个reduce_to_date,它是所有日期的目标。

current_date = pd.to_datetime('2017-04-05')  #This will later be dynamic
reduce_to_date = current_date - pd.DateOffset(days=7)

我试图找到一种简单的方法来更改系列中的日期而不更改时间。
我试图通过 .strftime() 避免冗长的转换。

我几乎已经确定的一种方法是将 reduce_to_datedf['Timestamp'] 差异添加到 df['Timestamp']。但是,我试图使用 .date() 函数,它只适用于单个元素,不适用于系列。

好!

passed_df['Timestamp'][0] = passed_df['Timestamp'][0] + (reduce_to_date.date() - passed_df['Timestamp'][0].date())

不好

passed_df['Timestamp'][:] = passed_df['Timestamp'][:] + (reduce_to_date.date() - passed_df['Timestamp'][:].date())

AttributeError: 'Series' object has no attribute 'date'

我可以使用一个循环:

x=1
for line in passed_df['Timestamp']:
passed_df['Timestamp'][x] = line + (reduce_to_date.date() - line.date())
x+=1

但这会引发警告:

C:\Users\elx65i5\Documents\Lightweight Logging\newmain.py:60: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

目标是让所有日期都相同,但保留原来的时间。
如果我们可以简单地指定更换日期,那就太好了。
如果我们可以使用数学并根据时间增量更改每个日期,同样很棒。
我们能否在不使用 .strftime() 或冗长的过程的情况下以矢量化方式完成此操作?

最佳答案

如果我没理解错的话,你可以简单地减去一个偏移量

passed_df['Timestamp'] -=  pd.offsets.Day(7)

演示

passed_df=pd.DataFrame(dict(
Timestamp=pd.to_datetime(['2017-04-05 15:21:03', '2017-04-05 19:10:52'])
))

# Make sure your `Timestamp` column is datetime.
# Mine is because I constructed it that way.
# Use
# passed_df['Timestamp'] = pd.to_datetime(passed_df['Timestamp'])

passed_df['Timestamp'] -= pd.offsets.Day(7)

print(passed_df)

Timestamp
0 2017-03-29 15:21:03
1 2017-03-29 19:10:52

使用strftime
虽然这并不理想,但我想说明一点,您绝对可以使用 strftime。当您的列是日期时间时,您可以通过带有 dt.strftimedt 日期访问器来使用 strftime。您可以创建一个动态列,在其中指定目标日期,如下所示:

pd.to_datetime(passed_df.Timestamp.dt.strftime('{} %H:%M:%S'.format('2017-03-29')))

0 2017-03-29 15:21:03
1 2017-03-29 19:10:52
Name: Timestamp, dtype: datetime64[ns]

关于python - 如何更改日期而不是数据框列中时间戳的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com