如何修改 pandas 数据框的日期时间对象列中的分钟数?
How to modify minutes in a column of datetime object of pandas dataframe?
我想将 10 分钟间隔内的任何分钟转换为第 5 分钟。例如10-19分钟转换为15分钟,20-29分钟转换为25分钟等。
以下是数据框中我的日期时间列的摘录。
2020-06-25 13:23:48
2020-06-25 13:36:18
2020-06-25 13:41:32
2020-06-25 13:59:27
我想要的输出是:
2020-06-25 13:25:00
2020-06-25 13:35:00
2020-06-25 13:45:00
2020-06-25 13:55:00
构建数据框:
import pandas as pd
from datetime import datetime
df = pd.DataFrame(
data={
"dt": [
"2020-06-25 13:23:48", "2020-06-25 13:36:18",
"2020-06-25 13:41:32", "2020-06-25 13:59:27"
]
}
)
df
看起来像这样:
datetime
0 2020-06-25 13:23:48
1 2020-06-25 13:36:18
2 2020-06-25 13:41:32
3 2020-06-25 13:59:27
我们可以定义一个函数应用于dt列df
:
def change_dt(x):
f = "%Y-%m-%d %H:%M:%S"
dt = datetime.strptime(x, f)
if dt.minute < 10:
m = 5
elif dt.minute >= 10 and dt.minute < 20:
m = 15
elif dt.minute >= 20 and dt.minute < 30:
m = 25
elif dt.minute >= 30 and dt.minute < 40:
m = 35
elif dt.minute >= 40 and dt.minute < 50:
m = 45
else:
m = 55
return dt.replace(minute=m, second=0).strftime(f)
我们将 df
的 dt 列替换为将函数 change_dt
应用于此的结果列:
df.loc[:, "dt"] = df["dt"].apply(change_dt)
df
看起来像这样:
datetime
0 2020-06-25 13:25:00
1 2020-06-25 13:35:00
2 2020-06-25 13:45:00
3 2020-06-25 13:55:00
这是我的做法,不过我相信还有其他巧妙的方法可以做到这一点:
df = pd.DataFrame({'time' : [pd.datetime(*x) for x in [[2020,6,25,13,23,48],[2020,6,25,13,36,18],[2020,6,25,13,41,32],[2020,6,25,13,59,27]]]})
df.time = df.time.apply(lambda x: pd.datetime(x.year, x.month, x.day, x.hour, (x.minute//10)*10+5, 0))
结果是这样的:
print(df):
time
0 2020-06-25 13:25:00
1 2020-06-25 13:35:00
2 2020-06-25 13:45:00
3 2020-06-25 13:55:00
我想将 10 分钟间隔内的任何分钟转换为第 5 分钟。例如10-19分钟转换为15分钟,20-29分钟转换为25分钟等。
以下是数据框中我的日期时间列的摘录。
2020-06-25 13:23:48
2020-06-25 13:36:18
2020-06-25 13:41:32
2020-06-25 13:59:27
我想要的输出是:
2020-06-25 13:25:00
2020-06-25 13:35:00
2020-06-25 13:45:00
2020-06-25 13:55:00
构建数据框:
import pandas as pd
from datetime import datetime
df = pd.DataFrame(
data={
"dt": [
"2020-06-25 13:23:48", "2020-06-25 13:36:18",
"2020-06-25 13:41:32", "2020-06-25 13:59:27"
]
}
)
df
看起来像这样:
datetime
0 2020-06-25 13:23:48
1 2020-06-25 13:36:18
2 2020-06-25 13:41:32
3 2020-06-25 13:59:27
我们可以定义一个函数应用于dt列df
:
def change_dt(x):
f = "%Y-%m-%d %H:%M:%S"
dt = datetime.strptime(x, f)
if dt.minute < 10:
m = 5
elif dt.minute >= 10 and dt.minute < 20:
m = 15
elif dt.minute >= 20 and dt.minute < 30:
m = 25
elif dt.minute >= 30 and dt.minute < 40:
m = 35
elif dt.minute >= 40 and dt.minute < 50:
m = 45
else:
m = 55
return dt.replace(minute=m, second=0).strftime(f)
我们将 df
的 dt 列替换为将函数 change_dt
应用于此的结果列:
df.loc[:, "dt"] = df["dt"].apply(change_dt)
df
看起来像这样:
datetime
0 2020-06-25 13:25:00
1 2020-06-25 13:35:00
2 2020-06-25 13:45:00
3 2020-06-25 13:55:00
这是我的做法,不过我相信还有其他巧妙的方法可以做到这一点:
df = pd.DataFrame({'time' : [pd.datetime(*x) for x in [[2020,6,25,13,23,48],[2020,6,25,13,36,18],[2020,6,25,13,41,32],[2020,6,25,13,59,27]]]})
df.time = df.time.apply(lambda x: pd.datetime(x.year, x.month, x.day, x.hour, (x.minute//10)*10+5, 0))
结果是这样的:
print(df):
time
0 2020-06-25 13:25:00
1 2020-06-25 13:35:00
2 2020-06-25 13:45:00
3 2020-06-25 13:55:00