質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

320閲覧

リスト型で格納されているデータ項目に対する、pandasの「unique()」コマンドの適用について

biginner999

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2023/03/08 01:51

実現したいこと

リスト型で格納されているデータ項目に対して、pandasの「unique()」コマンドを適用する。

前提

python 3.9.7
pandas 1.3.4

(例)
DBの項目でリスト形式で格納されているものがあります。
何種類あるか確認したく、pandasのunique()コマンドやnunique()コマンドを使用してみましたが、
全く機能しません。

発生している問題・エラーメッセージ

df = pd.read_csv("df_temp.csv")
df
name value
0 [a]    12
1 [a,b]    13
2 [a]    9
3 [b]    5
4 [c]    8

エラーメッセージ

TypeError: unhashable type: 'list'

該当のソースコード

df["name"].unique()

試したこと

df_temp = df[ df["name"] == ['a'] ]

補足情報(FW/ツールのバージョンなど)

下記エラーメッセージ
('Lengths must match to compare', (14936,), (1,))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2023/03/08 02:03

こちら、df_temp.csv の中身はどの様になっているのでしょう?例えば、以下の様な内容になっていて、 name,value ['a'],12 "['a','b']",13 ['a'],9 ['b'],5 ['c'],8 以下の様に読み込めば name 列がリストになるのですが、、、 from ast import literal_eval df = pd.read_csv('df_temp.csv', converters={'name': literal_eval})
melian

2023/03/08 02:51

質問取り下げとのことですが、リストの中身の順序は問わない場合には `frozenset` でもよいかと思います。 df['name'].transform(frozenset).unique()
biginner999

2023/03/24 03:47

勉強になります。 コメントに気づかず、回答が遅れて申し訳ありませんでした。
guest

回答2

0

自己解決

早速のご回答をいただきありがとうございました。
最終的には、df_temp = df[ df["name"] == ['a'] ]のようなコマンドで、各リストの全パターンでデータフレームの行を抽出することを目標にしていましたが、おそらくこれは不可能な気がいたしますので、質問を取り下げます。
お騒がせして申し訳ありませんでした。

投稿2023/03/08 02:37

biginner999

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

tuple型だとhashableuniqueが使えるので以下のように変換してやればよいと思います。
なおa,bb,aは異なるものとして数えます。

Python

1import pandas as pd 2 3df = pd.DataFrame({'name':[['a'],['a','b'],['a'],['b'],['c']]}) 4ret = df['name'].apply(tuple).unique() 5print(ret) # [('a',) ('a', 'b') ('b',) ('c',)]

投稿2023/03/08 02:02

can110

総合スコア38252

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問