Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫的时区信息_Python_Pandas - Fatal编程技术网

Python 熊猫的时区信息

Python 熊猫的时区信息,python,pandas,Python,Pandas,我一直在努力从熊猫数据框中的列中删除时区信息。我已经检查了以下问题,但它对我不起作用: 我使用tz_localize将时区分配给datetime对象,因为我需要使用tz_convert转换到另一个时区。这将以“-06:00”的方式添加UTC偏移量。我需要去掉这个偏移量,因为当我试图将数据框导出到Excel时,它会导致一个错误 实际产量 2015-12-01 00:00:00-06:00 期望输出 2015-12-01 00:00:00 我尝试使用str()方法获取所需的字符,但tz_loc

我一直在努力从熊猫数据框中的列中删除时区信息。我已经检查了以下问题,但它对我不起作用:

我使用tz_localize将时区分配给datetime对象,因为我需要使用tz_convert转换到另一个时区。这将以“-06:00”的方式添加UTC偏移量。我需要去掉这个偏移量,因为当我试图将数据框导出到Excel时,它会导致一个错误

实际产量

2015-12-01 00:00:00-06:00
期望输出

2015-12-01 00:00:00
我尝试使用str()方法获取所需的字符,但tz_localize的结果似乎不是字符串。到目前为止,我的解决方案是将数据帧导出到csv,读取文件,并使用str()方法获取所需的字符


有更简单的解决方案吗?

如果总是要忽略最后6个字符,您可以简单地对当前字符串进行切片:

>>> '2015-12-01 00:00:00-06:00'[0:-6]
'2015-12-01 00:00:00'

可能有助于去除最后6个字符:

print df
                    datetime
0  2015-12-01 00:00:00-06:00
1  2015-12-01 00:00:00-06:00
2  2015-12-01 00:00:00-06:00

df['datetime'] = df['datetime'].astype(str).str[:-6]
print df
              datetime
0  2015-12-01 00:00:00
1  2015-12-01 00:00:00
2  2015-12-01 00:00:00

如果序列仅包含日期时间,则可以执行以下操作:

my_series.dt.tz_本地化(无)


这将删除时区信息(不会更改时间),并返回一系列简单的本地时间,例如,可以使用to_excel()将其导出到excel。

根据Beatriz Fonseca的建议,我完成了以下操作:

from datetime import datetime
df['dates'].apply(lambda x:datetime.replace(x,tzinfo=None))

要从所有列中删除时区,只需使用:

for col in df.select_dtypes(['datetimetz']).columns:
    df[col] = df[col].dt.tz_convert(None)

df['datetime'].dt.tz_本地化(无)?将
datetime
替换为您的列名。它不起作用。日期格式为“2015-12-01 00:00:00-06:00”。我使用“to_datetime”将原始日期格式转换为datetime对象,以便应用“tz_localize”转换为另一个时区。似乎tz_localize添加了偏移量,我还没有找到如何消除它。密切相关(如果不是重复)谢谢!这就成功了。我必须先将其转换为字符串。您可以使用
replace(tzinfo=None)
如下面的回答:@Beatriz Fronseca感谢您的建议。我想这很管用,但根据我的经验,最好先转换为datetime类,然后使用
pd.Series.dt.tz_localize
将时区设置为
,正如@Diego Mora Cespedes在这篇帖子的回答中所暗示的那样。最好不要依赖日期格式,这样可能会快得多。@quantif-绝对同意;)如果pandas数据框包含的列不是datetimes,该怎么办?我会遇到类似“TypeError:index不是有效的DatetimeIndex或PeriodIndex”@DaveX的错误,然后您会执行
my_df[time_columns]=my_df[time_columns].dt.tz_localize(None)
其中
time_columns
是具有datetime数据类型错误答案的列名列表:
tz_convert(None)
将在删除时区指示器之前转换为UTC,因此
pd.Timestamp('2015-12-01 00:00:00-06:00')。tz_convert(无)
将产生
Timestamp('2015-12-01 06:00:00')