Python 如何让pandas使用列的值,而不是将其作为一个系列使用?

Python 如何让pandas使用列的值,而不是将其作为一个系列使用?,python,pandas,Python,Pandas,我有一些数据被本地化到不同的时区,时区在一个单独的列中。我已经从postgres数据库将数据加载到pandas数据框中,我正在尝试将它们组合起来,以便根据需要进行调整。数据上的某些指标需要是UTC,而某些指标需要是本地化时间 我试过这个: df['timestamp'] = df['timestamp'].dt.tz_localize(tz=pytz.timezone(df['timezone'])) 我得到AttributeError:“Series”对象没有属性“upper”,我不知道如何

我有一些数据被本地化到不同的时区,时区在一个单独的列中。我已经从postgres数据库将数据加载到pandas数据框中,我正在尝试将它们组合起来,以便根据需要进行调整。数据上的某些指标需要是UTC,而某些指标需要是本地化时间

我试过这个:

df['timestamp'] = df['timestamp'].dt.tz_localize(tz=pytz.timezone(df['timezone']))
我得到AttributeError:“Series”对象没有属性“upper”,我不知道如何得到它正在处理的行

所以我这样做了:

for index, row in df.iterrows():
     df.loc['index', 'timestamp'] = row['timestamp'].tz_localize(tz=pytz.timezone(row['timezone']))
这是可行的,但需要很长时间来处理


关于我遗漏了什么或者有更好的方法吗?

使用itertuples仍然需要很长时间,但比iterrows快得多。没有什么需要改变的

for row in df.itertuples():
        df.loc[row.Index, 'timestamp'] = row.timestamp.tz_localize(tz=pytz.timezone(row.time_zone))

我还没有做过时间来知道它有多快。我以后会调查的。谢谢你@AndyL。用于指出时间点。

您能显示dfIIUC吗?您希望每一行的列
时间戳
从列
时区
转换为相应的时区。也就是说,每一行被转换成不同的时区。在这种情况下,没有合适的矢量化操作。您所能做的最好的方法是使用列表理解或itertuples来循环每一行。您需要看到什么,它们大约有50列,大约有400k行?时间戳是一个数据类型:datetime64[ns],时区是一个字符串。按时区分组并使用您的第一次尝试如何(每个时区都是
tz
)@AndyL。谢谢,看起来好多了。从iterrows更改为itertuples。一旦我完成测试,我将发布答案。