对dataframe列执行带apply()的正则表达式提取时,所有行都使用第一行的结果

2024-04-26 14:49:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pandas DateFrame中有一列时区字符串,其中每个字符串条目都是以下内容的变体:

'Local Time Zone (America/Chicago (CST) offset -21600)'

我试图通过apply调用提取字符串末尾的数字偏移量(以秒为单位):

df['minuteOffset'] = df.timezone.apply(lambda x: int(re.match('.*?offset (-?[0-9]*)\\)', a).group(1)))

然而,当我再看数据帧时,我看到第一个值-21600为所有行结转,即使其他行有其他值。如何在每行的基础上正确提取正则表达式以生成一个新列?为什么上面的操作失败了?


Tags: 字符串zonepandasdftimelocal条目变体
1条回答
网友
1楼 · 发布于 2024-04-26 14:49:27

我会这样做:

In [85]: In [82]: df
Out[85]:
   id                                               timezone
0   1  Local Time Zone (America/Chicago (CST) offset -21600)
1   2    Local Time Zone (Kiev/Ukraine (EEST) offset +10800)

In [86]: df['minuteOffset'] = df.timezone.str.replace(r'.*offset\s+([\+\-\d+]+)\)', r'\1').astype(int)/60

In [87]: df
Out[87]:
   id                                               timezone  minuteOffset
0   1  Local Time Zone (America/Chicago (CST) offset -21600)        -360.0
1   2    Local Time Zone (Kiev/Ukraine (EEST) offset +10800)         180.0

相关问题 更多 >