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

时间:2019-02-21 18:55:07

标签: python pandas numpy-ndarray

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

我尝试了以下方法:

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万行,请您帮我找到一种更有效的方法。

2 个答案:

答案 0 :(得分:2)

@ALollz提供了正确的答案。我将从那里延伸。要按预期转换成列表,只需使用list(np.unique(df.values))

答案 1 :(得分:1)

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

形式上,np.unique的第一个参数应该是一个 array_like 对象, 但正如我检查的那样,您还可以只传递 DataFrame

当然,如果您只想要简单的 list 而不是 ndarray ,请编写 np.unique(df).tolist()

根据您的评论进行编辑

如果您希望列表唯一但按出现的顺序,请输入:

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

操作顺序:

  • reshape将源数组更改为单列。
  • 然后创建一个 DataFrame ,其默认列名称= 0
  • 然后[0]仅接受此列(唯一)。
  • drop_duplicates确实按照名称中的指示行事。
  • 最后一步:tolist转换为简单的 list