gpt4 book ai didi

python - 用小数秒将 excel 时间导入 Pandas

转载 作者:行者123 更新时间:2023-12-05 07:59:38 24 4
gpt4 key购买 nike

我有一个包含时间列的 Excel 电子表格 (.xls)。时间在 Excel 中显示为分:秒.十分之一秒。如“50:59.2”“50:59.4”。原始数据包含小时:分钟:秒.decimalseconds。

当我将数据导入 pandas 时,我失去了十分之一秒:

indata=pd.read_excel('Data.xls','Tabular Data',header=9,skiprows=[1,2,3,4,5,6,7,8,10,11,12])
indata['Time']
0 17:50:59
1 17:51:00
2 17:51:00
3 17:51:00
...
indata.Time[0].microsecond
0
indata.Time[1].microsecond
0

我还尝试使用:pd.ExcelFile() 和 xls.parse 但得到了相同的结果。有什么方法可以控制 Pandas 如何从 Excel 解析时间?它在小时、分钟和秒方面变得“正确”,但它正在放弃我确实需要的十位。

附加信息:

作为测试,我也只是尝试使用xlrd直接读取数据。正如预期的那样,它确实将时间读取为 float 。但是,如果我随后尝试在某些时间数据上使用 xlrd.xldate_as_tuple(),我会丢失一秒的小数部分。而如果我直接使用 datetime.timedelta(),我会看到小数秒。
也许问题是 xlrd 正在丢弃数据?

解决方法:

我想出了一个变通办法。它没有解决根本问题,但它确实允许我读入数据。
我在 Excel 中打开电子表格并创建了一个新的时间列,它是基于时间的纯文本(名为 Time_str):=TEXT(A13,"h:mm:ss.0")
并保存了它。然后我可以使用 pd.read_excel 读取电子表格。
最后,我将这个新列转换为 Pandas 中的时间,如下所示:indata_t['Time2']=indata_t.Time_str.apply(lambda x: datetime.datetime.strptime(x,'%H:%M:%S.%f'))

或者,添加这样的日期:indata_t['Time2']=indata_t.Time_str.apply(lambda x: datetime.datetime.strptime('2009-01-11 '+x,'%Y-%m-%d %H:%M:%S. %F'))这是一个难题,但至少它让我可以导入数据。

最佳答案

Pandas 使用 xlrd 读取 Excel 文件,并使用 xlrd.xldate_as_tuple() 函数获取日期组件以输入到 datetime.time().

但是,xlrd.xldate_as_tuple() 仅返回秒而不是微秒,因此 pandas 会丢失信息。

例如,假设您有这样一个 Excel 文件(数字与时间相同,但没有格式):

Time            Number
0:17:51.000 0.012395833
0:17:51.200 0.012398148
0:17:51.400 0.012400463
0:17:51.600 0.012402778
0:17:52.800 0.012416667
0:17:53.000 0.012418981

那么,如果你用下面的程序读取数据:

import xlrd

workbook = xlrd.open_workbook('minutes.xls')
worksheet = workbook.sheet_by_name('Sheet1')

cell = worksheet.cell(2,0)

# Print the A2 cell value as a number.
print cell.value

# Print the seconds part of the A2 cell value.
print (cell.value * (24*60*60)) % 60

# Print the xldate_as_tuple output.
print xlrd.xldate_as_tuple(cell.value, workbook.datemode)

你得到以下输出:

0.0123981481481
51.2
(0, 0, 0, 0, 17, 51)

所以,秒的小数部分被读取 (51.2) 但不是由 xldate_as_tuple() 返回,因此 pandas 不可用。

这是 the documented behaviour xldate_as_tuple() 但您可以提交 feature request or a pull request .

更新:我submitted a fix为此,xlrd。

关于python - 用小数秒将 excel 时间导入 Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21004376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com