将二维numpy数组转换为无重复列表的有效方法

2024-06-02 07:23:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一个数据帧的两个不同列中提取值,将它们放在一个没有重复值的列表中

我尝试了以下方法:

arr = df[['column1', 'column2']].values
thelist= []
    for ix, iy in np.ndindex(arr.shape):
        if arr[ix, iy] not in thelist:
            thelist.append(edges[ix, iy])

这是可行的,但时间太长了。数据帧包含大约3000万行

例如:

  column1 column2 
1   adr1   adr2   
2   adr1   adr2   
3   adr3   adr4   
4   adr4   adr5   

应生成包含以下值的列表:

[adr1, adr2, adr3, adr4, adr5]

考虑到dataframe包含3000万行,您能帮我找到一种更有效的方法吗


Tags: 数据方法in列表ixarrcolumn1column2
2条回答

您可以只使用np.unique(df)(也许这是最短的版本)

形式上,np.unique的第一个参数应该是类似于数组的对象, 但正如我所检查的,您也可以只传递一个数据帧

当然,如果您只想要普通的列表而不是ndarray,请编写 np.unique(df).tolist()

编辑以下评论

如果您希望列表唯一,但按出现顺序,请写下:

pd.DataFrame(df.values.reshape(-1,1))[0].drop_duplicates().tolist()

操作顺序:

  • reshape将源数组更改为单个列
  • 然后创建一个数据帧,默认列名=0
  • 然后[0]只取这个(唯一的)列
  • drop_duplicates完全按照名字的意思行事
  • 最后一步:tolist转换为普通的列表

@ALollz给出了正确的答案。我将从那里开始。要按预期转换为列表,只需使用list(np.unique(df.values))

相关问题 更多 >