Python 从表中列的数组类型中提取值
我正在尝试使用pandas从sql表中提取位置代码/产品代码。该字段是一种数组类型,即在每行中有多个值作为列表。我必须从字符串中提取产品/位置代码的值 以下是该表的示例Python 从表中列的数组类型中提取值,python,python-3.x,pandas,dataframe,text,Python,Python 3.x,Pandas,Dataframe,Text,我正在尝试使用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
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
我以前从未使用过嵌套/数组类型的列。任何帮助都将不胜感激。我认为以下总体策略会很好地工作(您需要调试):
行
作为输入的函数(其思想是使用pandas.apply
方法来广播此函数)my_list=row['Constraints']
my_list=my_list.split(',')
。现在您有了一个列表,没有逗号set
:返回集合(数字)
每一行的输出将是一个集合-只要将所有这些集合合并在一起就可以得到最终结果。我认为以下总体策略会很好地工作(您需要调试):
行
作为输入的函数(其思想是使用pandas.apply
方法来广播此函数)my_list=row['Constraints']
my_list=my_list.split(',')
。现在您有了一个列表,没有逗号set
:返回集合(数字)
每行的输出将是一个集合-只需将所有这些集合合并在一起即可得到最终结果。您可以使用explode将每个变量放入一个单元格中的一列下:
df = df.explode('Constraints')
df['newConst'] = df['Constraints'].apply(lambda x: str(x).split('_')[1])
可以使用“分解”将每个变量放入一列下的单个单元格中:
df = df.explode('Constraints')
df['newConst'] = df['Constraints'].apply(lambda x: str(x).split('_')[1])
谢谢yashar和adrian。我能解决它。虽然直接分解不起作用,但我使用了以下方法来帮助我解决这个问题-
df=df.assign(constraints=df['constraints'].str.split(',')).explode('constraints')
df['constraints']=df['constraints'].apply(lambda x:str(x.split('u')[1])yw:)我只是好奇为什么分解不起作用。我复制了样本数据,效果很好。你能告诉我你是否得到了一个错误或无法使用的结果吗?它没有抛出任何错误。它什么也没做。运行脚本后,我的数据帧是相同的。谢谢@yashar和@adrian。我能解决它。虽然直接分解不起作用,但我使用了以下方法来帮助我解决这个问题-df=df.assign(constraints=df['constraints'].str.split(',')).explode('constraints')
df['constraints']=df['constraints'].apply(lambda x:str(x.split('u')[1])yw:)我只是好奇为什么分解不起作用。我复制了样本数据,效果很好。你能告诉我你是否得到了一个错误或无法使用的结果吗?它没有抛出任何错误。它什么也没做。运行脚本后,我的数据帧是相同的。