我一直在努力从熊猫数据框中的列中删除时区信息。 我已经检查了以下问题,但对我而言不起作用:
我可以将pandas DataFrame导出到Excel中以剥离tzinfo吗?
我使用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()方法获取所需的字符。
有没有更简单的解决方案?
df[datetime].dt.tz_localize(None)不起作用吗? 用您的列名替换datetime
谢谢。 它不起作用。 日期格式为" 2015-12-01 00:00:00-06:00"。 我使用" to_datetime"将原始日期格式转换为datetime对象,以便应用" tz_localize"转换为另一个时区。 看来tz_localize添加了该偏移量,但我还没有找到如何摆脱它的方法。
如果您的系列仅包含日期时间,则可以执行以下操作:
my_series.dt.tz_localize(None)
这将删除时区信息(不会更改时间),并返回一系列幼稚的本地时间,例如,可以使用to_excel()将其导出到excel。
如果pandas数据框包含日期时间以外的列怎么办? 我收到类似" TypeError:索引不是有效的DatetimeIndex或PeriodIndex"的错误
@DaveX,那么您将执行my_df[time_columns] = my_df[time_columns].dt.tz_localize(None),其中time_columns是具有datetime dtype的列名称的列表
也许帮助剥离最后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
谢谢! 做到了。 我必须先将其转换为字符串。
您可以在此答案中使用replace(tzinfo=None):stackoverflow.com/questions/10944047/remove-pytz-timezone/
@Beatriz Fronseca谢谢您的建议。
按照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)
如果它始终是您要忽略的最后6个字符,则可以简单地对当前字符串进行切片:
>>> '2015-12-01 00:00:00-06:00'[0:-6]
'2015-12-01 00:00:00'