Python 如何正确设置pandas tz_本地化?
为什么这个“pythonic”代码在Python 如何正确设置pandas tz_本地化?,python,pandas,Python,Pandas,为什么这个“pythonic”代码在tz\u localize()行上不起作用 import pandas as pd df = pd.DataFrame([{ "Localtime":"2016-01-01 12:00:00", "Timezone":"Europe/London" }, { "Localtime":"2016-01-01 12:00:00", "Timezone":"Europe/Paris" }]) df['UtcDateTime
tz\u localize()
行上不起作用
import pandas as pd
df = pd.DataFrame([{ "Localtime":"2016-01-01 12:00:00", "Timezone":"Europe/London" },
{ "Localtime":"2016-01-01 12:00:00", "Timezone":"Europe/Paris" }])
df['UtcDateTime'] = pd.to_datetime(df['Localtime']).tz_localize(df['Timezone'])
df
我正在寻找比以下代码更漂亮的代码(顺便说一句,它工作得很好):
预期结果:
Localtime Timezone UtcDateTime
0 2016-01-01 12:00:00 Europe/London 2016-01-01 12:00:00+00:00
1 2016-01-01 12:00:00 Europe/Paris 2016-01-01 12:00:00+01:00
您可能只想选择使用 演示
>>> df['UtcDateTime'] = df.apply(lambda x: pd.to_datetime(x.Localtime).tz_localize(x.Timezone), axis=1)
>>> df
Localtime Timezone UtcDateTime
0 2016-01-01 12:00:00 Europe/London 2016-01-01 12:00:00+00:00
1 2016-01-01 12:00:00 Europe/Paris 2016-01-01 12:00:00+01:00
缩短方法不起作用的原因是,
tz_localize
确实需要一个索引,而不是值。我建议您将其转换为DatetimeIndex,类似于pd.DatetimeIndex
,
然而,
tz_localize
只接受一个时区,因此您最终将应用于行。您可能只需要选择使用
演示
>>> df['UtcDateTime'] = df.apply(lambda x: pd.to_datetime(x.Localtime).tz_localize(x.Timezone), axis=1)
>>> df
Localtime Timezone UtcDateTime
0 2016-01-01 12:00:00 Europe/London 2016-01-01 12:00:00+00:00
1 2016-01-01 12:00:00 Europe/Paris 2016-01-01 12:00:00+01:00
缩短方法不起作用的原因是,
tz_localize
确实需要一个索引,而不是值。我建议您将其转换为DatetimeIndex,类似于pd.DatetimeIndex
,
但是,
tz\u localize
只接受一个时区,因此您最终将应用于行。您的代码不起作用,因为tz\u localize()
希望对一系列中的多个值应用一个时区。要使循环更干净,可以使用apply()
作为:
代码:
def localize_ts(row):
return pd.to_datetime(row['Localtime']).tz_localize(row['Timezone'])
df['UtcDateTime'] = df.apply(localize_ts, axis=1)
Localtime Timezone UtcDateTime
0 2016-01-01 12:00:00 Europe/London 2016-01-01 12:00:00+00:00
1 2016-01-01 12:00:00 Europe/Paris 2016-01-01 12:00:00+01:00
产生:
def localize_ts(row):
return pd.to_datetime(row['Localtime']).tz_localize(row['Timezone'])
df['UtcDateTime'] = df.apply(localize_ts, axis=1)
Localtime Timezone UtcDateTime
0 2016-01-01 12:00:00 Europe/London 2016-01-01 12:00:00+00:00
1 2016-01-01 12:00:00 Europe/Paris 2016-01-01 12:00:00+01:00
您的代码不起作用,因为
tz_localize()
希望对序列中的多个值应用一个时区。要使循环更干净,可以使用apply()
作为:
代码:
def localize_ts(row):
return pd.to_datetime(row['Localtime']).tz_localize(row['Timezone'])
df['UtcDateTime'] = df.apply(localize_ts, axis=1)
Localtime Timezone UtcDateTime
0 2016-01-01 12:00:00 Europe/London 2016-01-01 12:00:00+00:00
1 2016-01-01 12:00:00 Europe/Paris 2016-01-01 12:00:00+01:00
产生:
def localize_ts(row):
return pd.to_datetime(row['Localtime']).tz_localize(row['Timezone'])
df['UtcDateTime'] = df.apply(localize_ts, axis=1)
Localtime Timezone UtcDateTime
0 2016-01-01 12:00:00 Europe/London 2016-01-01 12:00:00+00:00
1 2016-01-01 12:00:00 Europe/Paris 2016-01-01 12:00:00+01:00