python - 获取系列内的数组切片
问题描述
我有一个诉讼数据框,其中一列是诉讼编号,我想根据编号过滤值,因为它可以识别它来自消费者还是员工。这个数字的通常格式是: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
. .
. .
. .
解决方案
之后使用 .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
推荐阅读
- python - wxPython DataViewCtrl 子文本项编辑器出现错误
- javascript - 从我的自定义模块访问第三方包的正确方法是什么?
- rest - Spring REST端点返回字符串而不是JSON
- javascript - 为什么我的一些 JQuery 会立即加载,而其他部分需要十多分钟才能加载到页面上(或从不加载)?
- java - JVM内存不足问题
- git - “HEAD”在哪里定义为无效的分支名称?
- node.js - 部署错误Node.js 8 ...函数部署有以下功能错误:dialogflowFirebaseFulfillment
- r - 有没有办法将线图分割成分支,分支从 ggplot2 中的主线分叉出来?
- java - 我可以使用 Spring Boot 在正在运行的应用程序上添加数据库连接吗?
- internet-explorer - FB JS SDK:FB.Login 回调在 IE 11 上触发了两次