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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

Q&A

解決済

3回答

2663閲覧

value_counts()[]の挙動がわからない

cunwe

総合スコア65

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

0グッド

0クリップ

投稿2021/10/05 11:17

データ分析の中でよく出てくる(例えばこれ)のですが、Pandas のSeriesクラスに用意されているvalue_counts()を用いたvalue_counts()[0]みたいなコードの意図がわからないです。

import pandas as pd import numpy as np index = pd.Index([3, 1, 2, 3, 4, np.nan]) print(index.value_counts()[0])

ドキュメントにあるように、上のような簡単なコードを書いて挙動を確かめようとしたのですが、value_counts()[0]を実行すると下のようなエラーが出てしまいました。

Traceback (most recent call last): File "/Users/m.t./sentiment_analysis/ML_practice/myvenv/lib/python3.9/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc return self._engine.get_loc(casted_key) File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/hashtable_class_helper.pxi", line 1533, in pandas._libs.hashtable.Float64HashTable.get_item File "pandas/_libs/hashtable_class_helper.pxi", line 1542, in pandas._libs.hashtable.Float64HashTable.get_item KeyError: 0.0

一方、value_counts()[]の[]内の数字を1,2,3,4と上げていくと出力は1,1,2,1となったのですが仕組みが理解できてないです。

やったこと

エラー中のlocというのはこちらの記事で、pandasで任意の値を取得するプロパティと書かれていたのですが今回それを使わないでできるのではと思いました。知見をお持ちの方、よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ドキュメントにあるように、上のような簡単なコードを書いて挙動を確かめようとしたのですが、value_counts()[0]を実行すると下のようなエラーが出てしまいました。

Python

1index = pd.Index([3, 1, 2, 3, 4, np.nan]) 2a = index.value_counts() 3print(a) 4#3.0 2 5#4.0 1 6#2.0 1 7#1.0 1 8#dtype: int64 9 10print(type(a)) 11#<class 'pandas.core.series.Series'>

ドキュメントの通りvalue_counts()の戻り値はSeriesです。
上記例ですとキーとして使用できるのは「3,4,2,1」となります。そのためa[0]やa[5]はKeyErrorとなります。

投稿2021/10/05 11:59

meg_

総合スコア10760

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

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

cunwe

2021/10/06 02:08

ご回答くださりありがとうございます。本質的ではない質問で恐縮ですが、 3.0 1.0 2.0 4.0 の順番で表示されましたが、そちらで合ってますでしょうか?
meg_

2021/10/07 01:12

環境によって違うようですね。当方では回答の通りに表示されました。
guest

0

ベストアンサー

  • value_counts()[0]を実行すると下のようなエラーが出てしまいました。

value_counts()のindexの型はfloat64なので、pandasは0を0.0に変換してindexとして調べようとしましたが、Float64Index([3.0, 1.0, 2.0, 4.0], dtype='float64')には0.0はないのでエラーになっています。

  • value_counts()[]の[]内の数字を1,2,3,4と上げていくと出力は1,1,2,1となったのですが

3は2回あるけれども、1と2と4は1回ずつという意味です。
以下を見ればわかるでしょう。

python

1>>> print(index.value_counts()) 23.0 2 31.0 1 42.0 1 54.0 1 6dtype: int64 7>>> print(type(index.value_counts())) 8<class 'pandas.core.series.Series'>

投稿2021/10/05 11:59

ppaul

総合スコア24670

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

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

cunwe

2021/10/06 02:09

ご回答くださりありがとうございます、全部表示させると理解できました。
guest

0

リストを返すメソッドなんでしょうね

a = index.value_counts()
print(a[0])

と考えるとわかりやすいんじゃないかと

投稿2021/10/05 11:45

編集2021/10/05 11:47
y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問