获取系列内的数组切片



我有一个诉讼数据帧,其中一列是诉讼编号,我想根据数字过滤值,因为它可以识别它来自消费者还是员工。此数字的通常格式是:0000000-11.2222.3.44.5555,它包含 25 个字符,因此初始过滤是基于此完成的:

df = df[df['lawsuit'].map(str).map(len)==25].reset_index(drop=True)

对于来自其他来源的某些诉讼可能具有不同的长度。问题是我需要根据上述格式的个位数进一步过滤,这可以表明诉讼的性质。我尝试过并且它的工作原理如下:

for i in range(len(df)):
df['check'] = df['Processo'].str.split('.')[i][-3]

请注意,当用点分隔时,所需的检查号将始终是倒数第三,因此索引[-3],然后我可以从check列中仅选择符合我要求的行。 问题是它的成本很高,因为我的框架有 4000 多行,而且每天都在变大。我尝试了经典的过滤方法:

df[df['lawsuit'].str.split('.')[:][-3]=='8']

但它返回一个密钥错误。显然,它不会迭代行,从系列内的数组中获取切片并检查条件。恐怕我对熊猫如何对待这种物品还是缺乏了解的。 下面是一个示例输入和示例输出,过滤掉以点分隔的倒数第三的 4 的诉讼:

lawsuit                          lawsuit
0000000-11.2222.3.44.5555        0000000-11.2222.3.44.5555
0000001-11.2222.4.44.5555        0000001-11.2222.3.44.5555
0000001-11.2222.3.44.5555        0000002-11.2222.3.44.5555
0000002-11.2222.4.44.5555        0000003-11.2222.3.44.5555
0000002-11.2222.3.44.5555        0000004-11.2222.3.44.5555
.                                .
.                                .
.                                .

使用 .str 访问器访问split后列表中的值:

df['lawsuit'].str.split('.').str[-3]

输出:

0    3
1    4
2    3
3    4
4    3
Name: lawsuit, dtype: object

在这种情况下,从split创建的列表末尾获取第三个值。 等于使用df['lawsuit'].str.split('.').str.get(-3)

https://pandas.pydata.org/pandas-docs/stable/user_guide/text.html#splitting-and-replacing-strings

最新更新