pandas 以秒为单位转换Python Dataframe 日期列

mlmc2os5  于 2022-12-25  发布在  Python
关注(0)|答案(3)|浏览(118)

我正在使用pd.read_csv阅读一个.csv数据文件,我从全局 Dataframe (包含数千行)中获得了以下前5行:

time                   id   time_offset
0   2017-12-01 21:00:00     0   -60
1   2017-12-01 21:01:00     0   -59
2   2017-12-01 21:02:00     0   -58
3   2017-12-01 21:03:00     0   -57
4   2017-12-01 21:04:00     0   -56

我不太擅长在Python中操作日期,也不知道如何操作:
1.在我的 Dataframe 中从现有time列创建一个新的hour列,仅包含hours:minutes:seconds数据,该数据应为:21:00:0021:01:0021:02:00等等。
1.然后根据新创建的hour创建另一列seconds,其中包含自时间0以来经过的秒数,该列应为:75600(按21x3600计算)、75601(按21x3600 + 1计算)等。
任何帮助解决这个问题的人都将不胜感激。

wbgh16ku

wbgh16ku1#

您可以尝试:

# convert `time` column to datetime (if necessary):
df["time"] = pd.to_datetime(df["time"])

df["hour"] = df["time"].dt.time
df["seconds"] = (
    df["time"].dt.hour * 60 * 60
    + df["time"].dt.minute * 60
    + df["time"].dt.second
)
print(df)

图纸:

time  id  time_offset      hour  seconds
0 2017-12-01 21:00:00   0          -60  21:00:00    75600
1 2017-12-01 21:01:00   0          -59  21:01:00    75660
2 2017-12-01 21:02:00   0          -58  21:02:00    75720
3 2017-12-01 21:03:00   0          -57  21:03:00    75780
4 2017-12-01 21:04:00   0          -56  21:04:00    75840
o2g1uqev

o2g1uqev2#

将日期时间序列指定为索引通常很有用。请使用pd.to_datetime()将其转换为可用格式。

df.index = pd.to_datetime(df['time'])
df.drop('time',axis=1)

1.可以使用strftime函数-https://strftime.org/

df['time'] = df.index.strftime("%H:%M:%S")

1.由于df.index[0]是您第一次可以减去并使用.seconds属性:

df['seconds since'] = (df.index = df.index[0]).seconds
isr3a4wc

isr3a4wc3#

    • 示例**
data = {'time': {0: '2017-12-01 21:00:00', 1: '2017-12-01 21:01:00', 2: '2017-12-01 21:02:00', 
                 3: '2017-12-01 21:03:00', 4: '2017-12-01 21:04:00'}, 
        'id': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}, 
        'time_offset': {0: -60, 1: -59, 2: -58, 3: -57, 4: -56}}
df = pd.DataFrame(data)

第一个月

time                   id   time_offset
0   2017-12-01 21:00:00     0   -60
1   2017-12-01 21:01:00     0   -59
2   2017-12-01 21:02:00     0   -58
3   2017-12-01 21:03:00     0   -57
4   2017-12-01 21:04:00     0   -56
    • 代码**

制作timedelta,使用dt.total_seconds(),在示例中,由于time列是object,可以通过以下方式转换为timedelta。

pd.to_timedelta(df['time'].str.split(' ').str[1])

你可以使用dt.total_seconds()将timedelta转换为秒

s = pd.to_timedelta(df['time'].str.split(' ').str[1]).dt.total_seconds()

s

0    75600.0
1    75660.0
2    75720.0
3    75780.0
4    75840.0
Name: time, dtype: float64

相关问题