首页 > 解决方案 > 获取系列内的数组切片

问题描述

我有一个诉讼数据框,其中一列是诉讼编号,我想根据编号过滤值,因为它可以识别它来自消费者还是员工。这个数字的通常格式是: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]

请注意,当用点分隔时,所需的支票号码将始终是倒数第三个,因此是 index [-3],然后我可以从check列中仅选择符合我要求的行。问题是它很昂贵,因为我的框架有超过 4000 行,而且它一天比一天大。我尝试了经典的过滤方法:

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

但它返回一个关键错误。显然,它不会遍历行,从系列内的数组中获取切片并检查条件。恐怕还是对pandas是如何对待这种物体缺乏了解的。以下是样本输入和样本输出,过滤掉倒数第三个以点分隔的诉讼:

         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
             .                                .
             .                                .
             .                                .

标签: pythonpandasfilter

解决方案


之后使用 .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


推荐阅读