处理pandas.datetime类型

时间:2018-08-13 17:22:33

标签: python python-3.x pandas exception warnings

我有一个xlsx文件,其列包含日期的格式为:“ 01.01.1900 09:01:25”。该文件受密码保护,因此我通过win32com.client库将其转换为数据框。

代码如下:

import pandas as pd
import win32com.client

xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.DisplayAlerts = False
xlwb = xlApp.Workbooks.Open(File, False, True, None, " ") #Open Workbook password " "
xlws = xlwb.Sheets("Sheet 1") #Open Sheet 1        

#Get table dimensions 
LastRow = xlws.Range("A1").CurrentRegion.Rows.Count
LastColumn = xlws.Range("A1").CurrentRegion.Columns.Count
header=list((xlws.Range(xlws.Cells(1, 1), xlws.Cells(1, LastColumn)).Value)[0])
content = list(xlws.Range(xlws.Cells(2, 1), xlws.Cells(LastRow, LastColumn)).Value)
#Get the dataframe
df=pd.DataFrame(data=content, columns=header)
print (df)

我检查了一次导入的dtype是否已自动正确地分配给该列的datetime64。问题是,无论何时我尝试对该列的任何值进行任何处理(只需打印或比较),我都会收到一条消息:

  File "pandas\_libs\tslibs\timezones.pyx", line 227, in pandas._libs.tslibs.timezones.get_dst_info

AttributeError: 'NoneType' object has no attribute 'total_seconds'

Exception ignored in: 'pandas._libs.tslib._localize_tso'
Traceback (most recent call last):
  File "pandas\_libs\tslibs\timezones.pyx", line 227, in pandas._libs.tslibs.timezones.get_dst_info
AttributeError: 'NoneType' object has no attribute 'total_seconds'
Traceback (most recent call last):

尽管如此,代码仍然可以正常工作,但是警告消息却让我很烦。

我可以使用该数据类型来避免该警告吗?

1 个答案:

答案 0 :(得分:0)

以这种方式打开excel,content变量是一个元组列表。

看看这些元组,有一个TimeZoneInfo可以将所有日期本地化为一种时区,在我的例子中是“ GMT标准时间”。

因此,一旦转换为数据帧,进行df.dtypes时的结果不仅是“ datetime64”,而且是“ datetime64(UTC + 0:00)都柏林,爱丁堡,...”

仅当通过win32com.client打开excel文件时才发生此时区设置。如果删除了密码,则可以使用pandas.read_excel打开密码,然后发现没有为那些日期时间设置时区,并且不会出现上述警告。

不知道发生这种情况的确切原因,但是我对原始示例有解决方案。该警告消失,将被tz数据库识别的时区设置为"UTC"或简单地设置为None。像这样:

df["col_name"]=df["col_name"].dt.tz_convert(None)