为什么这个“pythonic”代码在 tz_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
我正在寻找比以下代码更漂亮的代码(顺便说一句,它工作正常):
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'] = 'NA'
i=0
for ts in df.Localtime:
ts1 = pd.to_datetime(ts).tz_localize(df.Timezone[i])
df['UtcDateTime'][i] = ts1
i=i+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() 需要将单个时区应用于一系列中的多个值。为了让你的循环更简洁,你可以使用 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
