【发布时间】:2014-05-07 20:20:08
【问题描述】:
所以我使用 python pandas 有以下变量:
- 一个数据框
df,我创建了一个“TAG”列,用于将数据标记到 基于“IDnumber”列中的数据进行分组。 - 存储在数组中的正则表达式模式
pattern1、pattern2、pattern2-2, ...等 - 一个数组
group,其中填充了字符串(即:'software'、'engineering'、'marketing'...等)。
代码根据正则表达式模式pattern1、pattern2、pattern22、...等,用数组group中的字符串填充列df.TAG
到目前为止,我有工作代码,但有多个看起来相同的 for 循环存在冗余
for i in range(len(pattern1)):
df.loc[df.IDnumber.str.contains(pattern1[i]) & (df.TAG == ''),'TAG'] = group[1]
for i in range(len(pattern2)):
df.loc[df.IDnumber.str.contains(pattern2[i]) & (df.TAG == ''),'TAG'] = group[2]
for i in range(len(pattern22)):
df.loc[df.IDnumber.str.contains(pattern22[i]) & (df.TAG == ''),'TAG'] = group[2]
for i in range(len(pattern33)):
df.loc[df.IDnumber.str.contains(pattern33[i]) & (df.TAG == ''),'TAG'] = group[3]
for i in range(len(pattern3)):
df.loc[df.IDnumber.str.contains(pattern3[i]) & (df.TAG == ''),'TAG'] = group[3]
我也收到了警告。
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
df.loc[df.IDnumber.str.contains(pattern1[i]),'TAG'] = group[1]
但是代码可以工作,所以我想知道是否有一种方法可以通过减少 for 循环的数量来提高代码效率,并在不使用 pd.options.mode.chained_assignment = None 抑制警告的情况下删除警告。
【问题讨论】:
标签: python regex pandas iteration