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