【问题标题】:Converting time format for column of pandas dataframe转换熊猫数据框列的时间格式
【发布时间】:2018-07-13 23:20:15
【问题描述】:

我有一个 pandas 时间框架,其中有一列采用这种时间格式:例如05:00:00(时、分、秒)。这些值是通过 pandas 使用以下查询函数从我的 SQL 数据库中提取的

df = pd.read_sql("SELECT .....'" \
, con=mariadb_connection)

我想将这些时间值转换为分钟(或秒),因为我想对作为我的持续时间变量的值执行线性回归。我该怎么做呢?有没有办法可以将这些值(例如,将 14:30:00 的 60 乘以 14 并加到 30,以获得以分钟为单位的总持续时间,即 870)为没有 : 的持续时间值,然后将它们放回相同数据框的行和列以供进一步分析?目前,我无法使用当前时间格式,因为 scikit 线性回归函数不接受这种格式作为函数的参数之一。

示例数据框:

    voltage valueA  Duration  valueB
0   12.45   0.86    14:04:30   9.157145
1   12.52   0.61    14:02:32  10.010095
2   12.24   0.17    14:00:33  10.010095

【问题讨论】:

标签: python pandas datetime dataframe scikit-learn


【解决方案1】:

演示:

In [143]: df
Out[143]:
       time
0  14:30:00
1  16:27:29

In [144]: df.dtypes
Out[144]:
time    object
dtype: object

In [145]: df['seconds'] = pd.to_timedelta(df['time']).dt.seconds

In [146]: df
Out[146]:
       time  seconds
0  14:30:00    52200
1  16:27:29    59249

In [147]: df.dtypes
Out[147]:
time       object
seconds     int64
dtype: object

更新:@JonClements has proposed another interesting idea 将时间(如果 Duration 列在 MariaDB 端具有 time 数据类型)转换为秒在 SQL 端

df = pd.read_sql("select voltage, valuea, valueb, time_to_sec(duration) as duration from some_table" ,
                  con=mariadb_connection)

【讨论】:

  • 如果 OP 具​​有实际的 TIME 类型而不是服务器上的字符串,则可能是这个,或者让 DB 处理它,例如 - 将查询更改为 select voltage, valuea, valueb, time_to_sec(duration) as duration from some_table...
  • @JonClements,Pandas 没有相应的 dtype - 在 Pandas 方面,它可以是 datetimeobject(字符串)...
  • 据我记得 - time_to_sec 返回一个整数....这是一个可用的类型(与您从 .dt.seconds 获得的相同 - 取决于您希望提升的位置。 .. 似乎在检索数据库之前让数据库执行它是有意义的......)
  • @JonClements,是的,现在我注意到 - mariadb_connection(这是一个 MySQL 分支),所以你的 SQL 应该可以工作。首先我很困惑,因为 AFAIK time_to_sec - 不属于 ANSI SQL Stabdard...
  • 只是一个可能的想法......但由于我们不知道它是一个字符串还是一个实际时间 - 这很可能是不可能的......这似乎是一个合理的选择,但不值得我发布如果您想同时涵盖这两个基础,请提供一个答案...
猜你喜欢
  • 2020-11-12
  • 1970-01-01
  • 2015-03-25
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 2021-05-27
相关资源
最近更新 更多