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

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

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

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

pandas

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

973閲覧

pandas [query関数を用いたデータの抽出]

ssshhlll

総合スコア0

Python

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

pandas

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1グッド

1クリップ

投稿2021/11/06 12:11

編集2021/11/06 22:36

前提・実現したいこと

[Python]
SpotifyのWeb APIを用いて、数値化した楽曲の特徴を範囲入力し、出力するようなプログラムを考えています。(その楽曲の特徴は0から1です。
入力した範囲内の楽曲を抽出したいところですが、うまくいきません。
どう考えたらいいでしょうか。

よろしくお願いいたします。

###入力例
min : 0.36
MAX : 0.52

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

KeyError: "None of [Float64Index([0.461, 0.497, 0.389, 0.375, 0.378, 0.393, 0.497, 0.376, 0.435,\n 0.372, 0.374],\n dtype='float64')] are in the [columns]"

該当のソースコード

python

1import spotipy 2import spotipy.util as util 3import pandas as pd 4------------------------------------------------- 5def track_info(limit = 50): 6 saved_tracks = sp.current_user_saved_tracks(limit = limit, offset = 50) 7 8 track_id = lambda i: saved_tracks['items'][i]['track']['id'] 9 track_name = lambda i: sp.track(track_id(i))['name'] 10 11 info = [[track_id(i), track_name(i)] for i in range(limit)] 12 return pd.DataFrame(info, columns = ['track_id','track_name']) 13 14#上で取得した楽曲の特徴を取得 15def track_features(track_ids, limit = 50): 16 return pd.DataFrame(sp.audio_features(track_ids)) 17df = pd.DataFrame(sp.audio_features(track_info()['track_id'])) 18mnum = float(input('min : ')) 19Mnum = float(input('MAX : ')) 20def get_track_from_features(): 21 info_valence = pd.concat([track_info(), track_features(track_info()['track_id'])], axis = 1) 22 info_valence = df.query('valence <= @Mnum and valence >= @mnum') 23 return info_valence[info_valence['valence']] 24print(get_track_from_features()[['track_id', 'track_name', 'valence']]) 25

試したこと

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

milton_rb4life👍を押しています

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

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

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

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

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

Supernove

2021/11/06 12:22

【sp.audio_features(track_info()['track_id'])】 ↑の値がどのような形になっているのか追記してほしいです。APIのレスポンスだとは思いますが、どうやってDataFrameを作成しているのか気になります。
melian

2021/11/06 12:58

return info_valence[info_valence['valence']] としていますが、そこは return info_valence['valence'] で良いのではないでしょうか。
ssshhlll

2021/11/06 22:38

ありがとうございます。再度確認いたします。
guest

回答1

0

自己解決

Python

1def get_track_from_features(): 2 info_valence = pd.concat([track_info(), track_features(track_info()['track_id'])], axis = 1) 3 info_valence = df.query('valence <= @Mnum and valence >= @mnum') 4 return info_valence[info_valence['valence']]

上記の部分を以下のように変更することで動きました。

Python

1def get_track_from_features(): 2 df = pd.concat([track_info(), track_features(track_info()['track_id'])], axis = 1) 3 info_valence = df.query(expr='@mnum <= valence <= @Mnum') 4 return info_valence

投稿2021/11/11 00:19

ssshhlll

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問