python - 从熊猫中的列的数组类型中提取值
问题描述
我正在尝试使用 pandas 从 sql 表中提取位置代码/产品代码。该字段是一个数组类型,即它在每一行中有多个值作为列表。我必须从字符串中提取产品/位置代码的值。
这是表格的示例
df.head()
Target_Type Constraints
45 ti_8188,to_8188,r_8188,trad_8188_1,to_9258,ti_9258,r_9258,trad_9258_1
45 ti_8188,to_8188,r_8188,trad_8188_1,trad_22420_1
45 ti_8894,trad_8894_0.2
现在我想提取代码的数值。我还想忽略条目中第二个下划线之后的最终浮点值,即忽略 _1、_0.2 等。
这是我想要实现的示例输出。它应该是所有提取值的唯一列表/df 列 -
Target_Type_45_df.head()
Constraints
8188
9258
22420
8894
我以前从未使用过嵌套/数组类型的列。任何帮助,将不胜感激。
解决方案
我认为以下总体策略会很好用(您需要调试):
- 定义一个以 a
row
作为输入的函数(想法是使用 pandas.apply
方法广播此函数)。 - 在这个函数中,设置
my_list = row['Constraints']
. - 然后做
my_list = my_list.split(',')
。现在你有一个没有逗号的列表。 - 接下来,用下划线分割,取第二个元素(索引 1),并转换为 int:
numbers = [int(element.split('_')[1]) for element in my_list]
- 最后,转换为
set
:return set(numbers)
每行的输出将是一个集合 - 只需将所有这些集合合并在一起即可获得最终结果。
推荐阅读
- java - Spring Security:登录后页面不重定向
- django - 如何过滤图像?
- azure-ad-b2c - 用于创建 AzureADB2C 的 Azure Fluent Api
- r - 有没有办法在不使下游目标无效的情况下将 file_in 输入的绝对路径更改为 drake?
- javascript - Laravel newly added javascript files give an error net::ERR_ABORTED 404 (Not Found)
- c# - 使用 NLOG 时无法解析服务时缺少详细信息
- c++ - (C++) 异常未处理 - 无效向量
下标 - node.js - 如何使用 express 将我的 mongoDB 查询显示为 json?
- r - 如何使用 barplot() 手动分配沿 x 轴的条形位置?
- c# - 获取计划返回 401 - 未经授权