当我使用下面的代码片段时,我可以看到事情被转换
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
答案 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`