tz_convert的时区转换不会保存在pandas数据帧中

时间:2018-01-22 18:58:00

标签: python pandas dataframe timezone

当我使用下面的代码片段时,我可以看到事情被转换

tweets_df['Time'] = pd.to_datetime(tweets_df['Time']) 

for index, row in tweets_df.iterrows(): 

    row['Time'] = row['Time'].tz_localize('UTC').tz_convert('US/Eastern') 
    print(row['Time']) 

虽然我在最后使用了以下内容,

for index, row in tweets_df.iterrows(): 
    print(row['Time']) 

它打印出未转换的那个。如何将转换后的版本保存在行中['时间']?

时间列包含2016-10-20 03:43:15+00:00

等元素

2 个答案:

答案 0 :(得分:1)

Pandas支持vecotorized操作,因此您不需要for循环:

tweets_df['Time'] = pd.Index(pd.to_datetime(tweets_df['Time'], utc=True)).tz_convert('US/Eastern')

答案 1 :(得分:1)

在代码的第一部分,您在循环的每次迭代中更改row变量的值,但这不会调整tweets_df ['Time']的行。如果要更改tweet_df数据帧,则应进行如下修改:

for index, row in tweets_df.iterrows(): 

    tweets_df['Time'].iloc[index] = row['Time'].tz_localize('UTC').tz_convert('US/Eastern')

但是,使用以下两行代码,您可以避免for循环:

tweets_df.Time  = pd.to_datetime(tweets_df.Time, utc=True) 
tweets_df.Time = tweets_df.Time.dt.tz_convert(tz = 'US/Eastern')

对于下面的简单数据框,结果如下:

tweets_df = pd.DataFrame()
tweets_df['Time'] = ['2018-03-01 09:00:00', '2018-03-02 09:00:00', '2018-03-03 09:00:00']
tweets_df.Time  = pd.to_datetime(tweets_df.Time,utc=True) 

print(tweets_df)


                   Time
0 2018-03-01 09:00:00+00:00
1 2018-03-02 09:00:00+00:00
2 2018-03-03 09:00:00+00:00`

tweets_df.Time = tweets_df.Time.dt.tz_convert(tz = 'US/Eastern')

print('Convert to US/Eastern time:\n',tweets_df)

Convert to US/Eastern time:
                        Time
0 2018-03-01 04:00:00-05:00
1 2018-03-02 04:00:00-05:00
2 2018-03-03 04:00:00-05:00`

如果要在保留本地时间(不转换为UTC)的同时删除时区信息:

tweets_df.Time = tweets_df.Time.dt.tz_localize(None)

print('Remove time zone information:\n',tweets_df)


Remove time zone information:
                  Time
0 2018-03-01 04:00:00
1 2018-03-02 04:00:00
2 2018-03-03 04:00:00`