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

问题描述 投票:0回答:2

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

我尝试过以下方法:

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]

考虑到数据帧包含3000万行,你能帮我找到一种更有效的方法吗?

python pandas numpy-ndarray
2个回答
2
投票

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


1
投票

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

形式上,np.unique的第一个参数应该是一个array_like对象,但是在我检查时,你也可以传递一个DataFrame。

当然,如果你只想简单列表而不是ndarray,请写np.unique(df).tolist()

Edit following your comment

如果您希望列表唯一但按外观顺序,请写入:

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

操作顺序:

  • reshape将源数组更改为单个列。
  • 然后创建一个DataFrame,默认列名为= 0
  • 然后[0]就是这个(唯一的)专栏。
  • drop_duplicates的行为与名称完全相同。
  • 最后一步:tolist转换为普通列表。
© www.soinside.com 2019 - 2024. All rights reserved.