Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从表中列的数组类型中提取值_Python_Python 3.x_Pandas_Dataframe_Text - Fatal编程技术网

Python 从表中列的数组类型中提取值

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

我正在尝试使用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

我以前从未使用过嵌套/数组类型的列。任何帮助都将不胜感激。

我认为以下总体策略会很好地工作(您需要调试):

  • 定义一个将
    作为输入的函数(其思想是使用pandas
    .apply
    方法来广播此函数)
  • 在此函数中,设置
    my_list=row['Constraints']
  • 然后执行
    my_list=my_list.split(',')
    。现在您有了一个列表,没有逗号
  • 接下来,使用下划线拆分,获取第二个元素(索引1),并转换为int:
  • 最后,转换为
    set
    返回集合(数字)

  • 每一行的输出将是一个集合-只要将所有这些集合合并在一起就可以得到最终结果。

    我认为以下总体策略会很好地工作(您需要调试):

  • 定义一个将
    作为输入的函数(其思想是使用pandas
    .apply
    方法来广播此函数)
  • 在此函数中,设置
    my_list=row['Constraints']
  • 然后执行
    my_list=my_list.split(',')
    。现在您有了一个列表,没有逗号
  • 接下来,使用下划线拆分,获取第二个元素(索引1),并转换为int:
  • 最后,转换为
    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:)我只是好奇为什么分解不起作用。我复制了样本数据,效果很好。你能告诉我你是否得到了一个错误或无法使用的结果吗?它没有抛出任何错误。它什么也没做。运行脚本后,我的数据帧是相同的。