转换pandas数据帧列的时间格式

时间:2018-02-03 17:16:10

标签: python pandas datetime dataframe scikit-learn

我有一个大熊猫时间表,其中包含此时间格式的列:例如df = pd.read_sql("SELECT .....'" \ , con=mariadb_connection) (小时,分钟,秒)。这些值是通过带有以下查询函数的pandas从我的SQL数据库中提取的

14:30:00

我想将这些时间值转换为分钟(或秒),因为我希望对作为我的持续时间变量的值执行线性回归。我怎么能这样做呢?有没有办法可以转换这些值(例如,将:乘以60到14并添加到30,将总持续时间(以分钟为单位,即870)转换为不带 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 的持续时间值,然后放置它们回到数据帧的相同行和列进行进一步分析?目前,我无法使用当前时间格式,因为scikit线性回归函数不接受此格式作为函数的参数之一。

示例数据框:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>userInformation</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Jersey RESTful Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.newgen.ap2</param-value>
    </init-param>
    <init-param>
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
    <param-value>com.newgen.ap2.CrossOrigin</param-value>
 </init-param>
  </servlet>
  <servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
  <servlet-mapping>
    <servlet-name>Jersey RESTful Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping> 

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

1 个答案:

答案 0 :(得分:2)

演示:

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)