使用pandas将时间读取为字符串

2024-05-17 16:01:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python3中的熊猫阅读excel。excel有一个列,记录每个记录花费的时间(以分钟和秒为单位)。第二列的内容是3:52,它是在特定步骤中花费的3分52秒,而不是熊猫df处理的“3:52:00 AM”。有办法避免吗? 以下是数据在excel中的外观:

Excel data

在上面的excel中,56:52:00实际上是56分52秒(同样如此)。excel列中的数据严格采用标题时间(mm:ss)中定义的格式。。在某些表单中可能是时间(hh:mm:ss)

以下是我创建df的方式:

>>> df = xl.parse(sheet_name,header=None,encoding="utf-8", skiprows=3,usecols={1})
>>> df
                       1
0               03:52:00
1               04:52:00
2               05:52:00
3               06:52:00
4               07:52:00
..                   ...
115  1900-01-02 08:52:00
116  1900-01-02 09:52:00
117  1900-01-02 10:52:00
118  1900-01-02 11:52:00
119             00:52:00

>>> df.dtypes
1    object
dtype: object


Tags: 数据内容dfobject记录时间步骤单位
2条回答

这应该对你有用。当pandas使用pandas.read_excel()读取excel文件时,它会将持续时间作为时间(HH:MM:SS)输入,其中3作为小时,52作为分钟,或者作为日期时间(YYYY-MM-DD HH:MM:SS)

      0                 1
0     1              03:52:00    (time object)
118   1   1900-01-02 08:52:00    (datetime object)
119   1              00:52:00    (time object)

代码将创建一个函数,通过从时间中减去午夜(date.min)并将其除以60,以分钟和秒(而非小时和分钟)表示持续时间,从而将该时间转换为时间增量(HH:MM:SS,3分52秒)

      0      1
0     1   00:03:52    (timedelta object)
118   1   00:56:52    (timedelta object)
119   1   00:00:52    (timedelta object)

您可以使用timedelta模块修改持续时间的显示方式。可能有一种更好的方法将持续时间作为时间增量读取,但我不确定如何执行该操作

import pandas as pd
from datetime import datetime, date

df=pd.read_excel("filepath")
def convert_to_duration(timeobj):
    if type(timeobj) == datetime:
        datetimemin = datetime.strptime("1899-12-31 00:00:00","%Y-%m-%d %H:%M:%S")
        return (timeobj - datetimemin)/60
    if type(timeobj) == time:    
        return (datetime.combine(date.min,timeobj)-datetime.min)/60

df[1]=df[1].apply(convert_to_duration)
df

可以在read_excel()时使用converterskwarg,并指定要转换类型以使用的列标题名

import pandas as pd
df = pd.read_excel('Data.xlsx', converters={'col':str})

dtypekwarg

import pandas as pd
df = pd.read_excel('Data.xlsx', dtype={'col':str})

相关问题 更多 >