

pandasでuniqueを使用したいのですが、Dataframeでしか取り出せないためどうすればいいのか分かりません。

pandasで読み込んでいるデータ(df)

[code]

        a   b
        -0.2    -0.200
        -0.2    -0.195
        -0.2    -0.190
        -0.2    -0.185
        -0.2    -0.180
    
[/code]

列名に関係なく取り出したいため、`df.iloc[:,[0]]`でデータを取り出しています。この取り出したデータに対して`unique`を使いたいです。  
しかし、`df.iloc[:,[0]]`の場合、Dataframeでしか取り出せないため、`df.iloc[:,[0]].unique`としたいのですが、`AttributeError:
'DataFrame' object has no attribute
'unique'`となり、うまく実行することが出来ません。どうすればいいのでしょうか？


CC BY-SA 4.0
2022-12-04T03:08:13.100
92567
2022-12-05T01:11:57.247
2022-12-04T04:48:16.123
40451
40451
question
python pandas
pandasでuniqueを使用したいのですが、Dataframeでしか取り出せないためどうすればいいのか分かりません。


カラムから pandas.Series取り出すにはいくつか方法があります

  * `df['a']`
  * `df.a`
  * `df[df.columns[0]]`
  * `df.iloc[:, 0])`

`df.iloc[:,[0]]` ではリスト指定なので結果は DataFrame

[code]

    df[df.columns[0]].unique()
    
    # array([-0.2])
    
[/code]


CC BY-SA 4.0
2022-12-04T05:17:14.837
92568
2022-12-04T05:17:14.837
43025
92567
answer


御質問が多少分かり難いので的外れかもしれませんが，データフレームの要素からユニークな要素の配列を得る方法を回答します。  
（追記）`.values` は非推奨なので，`.to_numpy()` に変更しました。

[code]

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame([[-0.2, -0.200], [-0.2, -0.195],
                       [-0.2, -0.190], [-0.2, -0.185],
                       [-0.2, -0.180]], columns=['a', 'b'])
    
    u1 = np.unique(df.iloc[:, [0]].to_numpy())  # original example
    u2 = np.unique(df.to_numpy())               # all elements
    
    print(u1); print(u2)
    
[/code]

[code]

    [-0.2]
    [-0.2   -0.195 -0.19  -0.185 -0.18 ]
    
[/code]


CC BY-SA 4.0
2022-12-04T15:01:52.397
92574
2022-12-05T01:11:57.247
2022-12-05T01:11:57.247
54588
54588
92567
answer


`df.iloc[:,0].unique())` とする方がよいかと思うのですが、あくまでも `pandas.DataFrame` 型に拘るのあれば
`pd.DataFrame.apply()` メソッドを使う方法があります。ただ、この場合は出力も `pandas.DataFrame` 型になります。

[code]

    print(df.iloc[:, [0]].apply(pd.Series.unique))
    print(df.iloc[:, [1]].apply(pd.Series.unique))
    
    #      a
    # 0 -0.2
    #
    #        b
    # 0 -0.200
    # 1 -0.195
    # 2 -0.190
    # 3 -0.185
    # 4 -0.180
    
[/code]


CC BY-SA 4.0
2022-12-04T15:41:21.753
92576
2022-12-04T15:41:21.753
47127
92567
answer