pandas - 如何将小时列中的数字转换为实际小时数

标签 pandas

我在 pandas 数据框中有一个“小时”列,它只是代表小时的从 0 到 23 的数字列表。当数字为单位数(如 1 )和两位数(如 18 )时,如何将它们转换为小时格式(如 01:00)?个位数需要有一个前导零、一个冒号和两个尾随零。两位数字只需要一个冒号和两个尾随零。如何在数据框中实现这一点?另外,我有一个“日期”列,需要在转换小时列后与小时列合并。

 e.g.    date           hour  
           2018-07-01     0
           2018-07-01     1
           2018-07-01     3
           ...
           2018-07-01     21
           2018-07-01     22
           2018-07-01     23

Needs to look like:
          date
          2018-07-01 01:00
          ...
          2018-07-01 23:00

数据源是 .csv 文件。 感谢您的考虑。我是 pandas 的新手,在他们的文档中找不到如何考虑单位数和两位数的数字。

最佳答案

通过 to_timedelta 将小时转换为时间增量并添加到由 to_datetime 转换的日期时间如果需要:

df['date'] = pd.to_datetime(df['date']) + pd.to_timedelta(df['hour'], unit='h')
print (df)
                 date  hour
0 2018-07-01 00:00:00     0
1 2018-07-01 01:00:00     1
2 2018-07-01 03:00:00     3
3 2018-07-01 21:00:00    21
4 2018-07-01 22:00:00    22
5 2018-07-01 23:00:00    23

如果需要还删除小时列,请使用DataFrame.pop

df['date'] = pd.to_datetime(df['date']) + pd.to_timedelta(df.pop('hour'), unit='h')
print (df)
                 date
0 2018-07-01 00:00:00
1 2018-07-01 01:00:00
2 2018-07-01 03:00:00
3 2018-07-01 21:00:00
4 2018-07-01 22:00:00
5 2018-07-01 23:00:00

关于pandas - 如何将小时列中的数字转换为实际小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62111981/

相关文章:

pandas - 仅选择每月最后一天的数据(行)

python - 将 xml 解析为 pandas 数据框会引发内存错误

python - 从现有数据框创建多索引

python - 如何在 pandas 索引中累积唯一的列总和

python - 无法对符合给定条件的列中的值求和

python - Pandas 数据框 : Dropping rows after meeting conditions in columns

python - 删除具有重复索引的 pandas 行

python - Asyncio Pandas 与 Inplace

python - Pandas - 根据列值对输入值进行排名

python - 如何仅用 Pandas 数据框中的另一个数字替换单个数字?