时间为 00:00 时,熊猫读取 excel 返回类型对象
Posted
技术标签:
【中文标题】时间为 00:00 时,熊猫读取 excel 返回类型对象【英文标题】:Pandas read excel returning type object when time is 00:00 【发布时间】:2021-06-03 08:04:36 【问题描述】:在更新的 Pandas 版本(我使用的是 1.2.3)中,从 excel 文件中读取时间时,时间为 00:00:00 时会出现问题。下面的脚本,其中文件路径是指向我的 excel 文件的路径,该文件包含一个标题为“时间”的列。
import pandas as pd
df = pd.read_excel(filepath)
print(df['Time'])
输出:
0 20:00:00
1 22:00:00
2 23:00:00
3 1899-12-30 00:00:00
4 02:00:00
5 02:45:00
6 03:30:00
7 04:00:00
8 04:45:00
9 05:30:00
10 07:00:00
11 08:00:00
12 08:45:00
13 09:30:00
14 10:30:00
15 10:45:00
16 11:45:00
17 12:30:00
18 13:15:00
19 14:00:00
20 14:45:00
21 15:45:00
22 23:00:00
23 1899-12-30 00:00:00
在 1.0.5 版本中并非如此。
如果没有上面第 3 行和第 23 行的日期,有没有办法正确读取这些时间?
【问题讨论】:
我相信您在 excel 中的第三列名称为“时间”。我的理解正确吗? 是的@ashtav,这是正确的。 尝试将 excel 读取为字符串df = pd.read_excel(excel_link, sheet_name, dtype=str)
。这可能会奏效。我无法升级我的熊猫,因为我使用的是旧版 python
【参考方案1】:
我可以重现这种行为(pandas 1.2.3);它会让您在“时间”列中混合使用 datetime.datetime
和 datetime.time
对象。
一种方法可以将时间列导入为字符串类型;你可以明确指定喜欢
df = pd.read_excel(path_to_your_excelfile, dtype='Time': str)
这会给你一些条目的前缀“excel day zero”。您可以通过在空间上拆分然后取出拆分结果的最后一个元素来删除它们:
df['Time'].str.split(' ').str[-1]
现在您可以继续将字符串转换为 datetime
、timedelta
等 - 在您的上下文中有意义的任何内容。
另一种处理方式可以是指定pandas应该将此列解析为日期时间;喜欢
df = pd.read_excel(path_to_your_excelfile, parse_dates=['Time'])
然后,您将拥有 pandas 的日期时间,可以是今天的日期,也可以是“excel day zero”:
df['Time']
0 2021-03-04 20:00:00
1 2021-03-04 22:00:00
2 2021-03-04 23:00:00
3 1899-12-30 00:00:00
4 2021-03-04 02:00:00
...
23 1899-12-30 00:00:00
Name: Time, dtype: datetime64[ns]
现在您有一些选择,具体取决于您打算进一步处理数据。你可以忽略日期,或者去掉它(df['Time'].dt.time
),或者解析成字符串(df['Time'].dt.strftime('%H:%M:%S')
)等等。
【讨论】:
以上是关于时间为 00:00 时,熊猫读取 excel 返回类型对象的主要内容,如果未能解决你的问题,请参考以下文章
给定熊猫中只有小时-分钟-秒格式的列,如何以秒为单位返回总时间? [关闭]