我正在使用python3中的pandas阅读excel。 excel有一列记录,以分钟为单位,每条记录花费时间。第二列显示为3:52是在该特定步骤中花费了3分52秒,而不是pandas df所说的“ 3:52:00 AM”。有办法避免吗? 数据在excel中的外观如下:
值56:52:00实际上是上述Excel中的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
答案 0 :(得分:0)
这应该为您工作。当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模块来修改持续时间的显示方式。可能有一个更好的方法可以将持续时间读取为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
答案 1 :(得分:-1)
在converters
时可以使用read_excel()
kwarg,并指定要转换类型以使用的列标题名称
import pandas as pd
df = pd.read_excel('Data.xlsx', converters={'col':str})
或dtype
kwarg
import pandas as pd
df = pd.read_excel('Data.xlsx', dtype={'col':str})