• 締切済み

Python 間違いを指摘して

import pandas as pd import folium df=pd.read_csv("バス停.csv") df=df[["路線番号","緯度","経度"]].values m=folium.Map(location=[35.942957,136.198863].zoom_start=16) for route in range(17): df2=df[["路線番号"]==route+1] df3=df2[["緯度","経度"]].values folium.PolyLine(df3).add_to(m) m.save("sabae.html") エラー IndexError: only integers, slices, ellipsis, numpy.newaxis and integer or boolian array are valid indices

  • Python
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

エラーの原因は、pandasのデータフレームのインデックス参照方法が正しくないため発生しています。具体的には、ピンポイントで問題が発生しているコードは以下の部分です。 ```python df2=df[["路線番号"]==route+1] ``` ここでは、条件を使ってデータフレームをフィルターしたいのですが、Pythonの比較演算子==を使う場合は、pandasシリーズ全体をその条件と比較する必要があります。正しいコードは以下のようになります。 ```python df2=df[df["路線番号"]==route+1] ``` また、`folium.Map`の`location`引数と`zoom_start`オプションの指定方法にも誤りがあります。両者の間にカンマが必要で、次のように書かなければなりません。 ```python m=folium.Map(location=[35.942957,136.198863], zoom_start=16) ``` 修正したコードは次のようになります。 ```python import pandas as pd import folium df = pd.read_csv("バス停.csv") df = df[["路線番号", "緯度", "経度"]].dropna() m = folium.Map(location=[35.942957, 136.198863], zoom_start=16) for route in range(17): df2 = df[df["路線番号"] == route+1] df3 = df2[["緯度", "経度"]].values if len(df3) > 1: # ポリラインを描くためには2点以上必要です folium.PolyLine(df3, color="blue", weight=2.5, opacity=1).add_to(m) m.save("sabae.html") ``` 最後の`if`文を追加することで、ポリラインを描くために少なくとも2つの地点が存在することを保証しています。その上、`PolyLine`オブジェクトに更にオプションを追加して線の外観をカスタマイズしています。 緯度経度のデータにNaN(非数)が含まれていないかも確認しています。もし含まれていれば、`dropna()`メソッドによってそれらの行が削除されます。 コードを修正し、データフレームの操作に慣れることで、今後この種のエラーを効果的に避けることができるでしょう。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

関連するQ&A

  • Python 間違いを指摘してください

    以下のPythonコードの間違いを指摘してください。 import pandas as pd import folium df=pd.read_csv("店舗.csv") store=df[["緯度","経度"]].values m=folium.Map(location=[35.942957,136.198863],zoom_start=16) for data in store: (インデント)folium.PolyLine([data[0],data[1]]).add_to(m) m.save("savae.html")

  • pandas-bokehのY軸の値を指数表記にしな

    今回、年寄りの冷や水ですがpythonに興味を持ちいろいろ試しています。htmlでグラフ表示するためpandas-bokehを追加しました。Y軸のデータの桁数が大きい場合グラフの値が自動的に指数表記になります。matplotlib.pyplotの場合は問題がなかったのでちょっと不便です。これを慣れている自然数の表記にしたいのでご教授お願いいたします。参考まで下記にコードを記しておきます。 matplotlib.pyplotの場合 import pandas as pd import matplotlib.pyplot as plt import japanize_matplotlib data = pd.read_csv('py003.csv',encoding="utf-8") #プロットするデータの範囲 df = data.iloc[:,[0,1,2,3]] df.plot(kind='bar',x=df.columns[0],figsize=(7, 5), rot=0,width=0.85,linewidth=1, edgecolor="w") plt.legend(ncol=3) plt.show() pandas-bokehの場合 import pandas as pd import pandas_bokeh pandas_bokeh.output_file("Interactive Plot.html") data = pd.read_csv('py003.csv',encoding="utf-8") df = data.iloc[:,[0,1,2,3]] p_bar = df.plot_bokeh.bar( x=df.columns[0], ylabel="金額 (千円)", title="月別売り上げ", alpha=0.6) ズブの素人ですがよろしくお願いいたします。

  • Pythonコードの間違いを指摘して

    import tkinter as tk lastplay="" def gamestart(): global lastplay lastplay="試合開始" frame_main.tkraise() root=tk.Tk() frame_settings=tk.Frame(root) frame_settings.grid() button_gamestart=tk.Button(frame_settings,command=gamestart) button_gamestart.grid() fraim_main=tk.Frame(root) fraim_main.grid() label_1=tk.Label(frame_main,text=f"{lastplay}です") label_1.grid() fraim_settings.tkraise() root.mainloop() エラー内容 frame_mainが表示されたとき、変数の「試合開始」が表示されず、「です」のみ表示される。

  • Pythonコードの間違いを指摘して

    import tkinter as tk i=0 def a(): global i i=1 root=tk.TK() root.geometry("100x100") a() label=tk.Label(root,text=i) label.grid() tk.mainloop() →できた import tkinter as tk i=0 def a(): global i i=1 root=tk.TK() root.geometry("100x100") label=tk.Label(root,text=i) label.grid() button=tk.Button(root,text="button",command=a) button.grid() tk.mainloop() →できない(0と表示される)

  • Scikit-learnを利用してデータの分類

    Scikit-learnを利用してデータの分類を行いたいと考えております。 ★検証したいこと マスタデータの名称、大分類CDを元に小分類CDを予測する 現状で実現できたこと ・学習モデルを生成(MLPClassifier)/保存 ・分類対象データを訓練データ/テストデータに分割 ・fitを利用して学習 ・predictを利用してテストデータの予測  ※精度は65%程度   実現できないこと ・ロードした学習モデルを呼び出して新たな分類対象データを  もとにpredictを行うと予測結果の精度が低い(1件も正しい予測がされない) 基本的な知識が欠落していることも想定され、大変恐縮ですが、ご存じの方がいらっしゃればご教授頂けますと幸いです。 yosoku.py ========================================== import os import sys # パラメータ渡しに必要 # [Scikit-learn] [サイキットラーン]機械学習ライブラリ from sklearn import datasets # サンプルのデータ from sklearn.neural_network import MLPClassifier # [ニューラルネットワーク]アルゴリズム from sklearn.model_selection import train_test_split # 訓練データ】と【テストデータ】を簡単に分けることができるライブラリ import sklearn as skl # [サイキットリーン]機械学習用ライブラリ import numpy as np # [ナンパイ]数値計算用ライブラリ import pandas as pd # [パンダス]データ解析ライブラリ import matplotlib.pyplot as plt # [マットプロットリブ]画像描画用のライブラリ import joblib as job # 学習モデルの保存/ロード #from sklearn.externals import joblib # 学習モデルの保存/ロード from datetime import datetime debug = "1" # DEBUGモード 0:ログ出力なし 1:ログ出力あり Dip_Glaf = "1" # グラフモード 0:なし 1:表示あり if debug == "1": print('*****************商品分類 予測 開始*****************') ret = "0" # 戻り値 try: filename = 'Hin_Bunrui_model_' filename = filename + datetime.now().strftime('%Y%m%d') + 'sav' df = pd.read_csv('test_BUNRUI_20620_2_kensyou.csv', encoding='shift_jis') # 品名を10新数に変換する事である程度法則性を持った値となるため品名も機械学習に有益となる print('*******品名10新数変換*********') for index, row in df.iterrows(): str_wk = row['HIN_NAME'] # DataFrameの品名を変数にセット str_wk2 = str_wk.encode('utf-8', 'replace').hex() # 品名を16新数に変換 [0x99のような形式] df.at[index, 'HIN_NAME'] = int(str_wk2,16) # 16新数の品名を10新数に変換しdataFrameを更新 #------------------------------------------------------------------------------ # 文字列カテゴリーを数値化する #------------------------------------------------------------------------------ #print('[HIN_NAME_SUB]の数値化') data = pd.factorize(df.iloc[: , 3]) df["HIN_NAME_SUB"] = data[0] # 0列目に変換後の値 1列目に変換前の値 #print('[HIN_NAME_SUB2]の数値化') data = pd.factorize(df.iloc[: , 4]) df["HIN_NAME_SUB2"] = data[0] # 0列目に変換後の値 1列目に変換前の値 print('[BUNRUI_SYO_NM]の数値化') data = pd.factorize(df.iloc[: , -1]) df["BUNRUI_SYO_NM"] = data[0] # 0列目に変換後の値 1列目に変換前の値 skl_Data = skl.utils.Bunch() # [target]目的変数[正解ラベル]にCSVデータの[Bunrui](分類CD)をセット skl_Data['target'] = df['BUNRUI_SYO'] print("***** 正解ラベル セット完了 [BUNRUI_SYO][小分類CD] *****") skl_Data['data'] = df.loc[:, ['HIN_NAME_SUB','HIN_NAME_SUB2', 'HIN_KBN', 'BUNRUI_DAI', 'BUNRUI_CHU' ]] skl_Data['feature_names'] = [ 'HIN_NAME_SUB','HIN_NAME_SUB2', 'HIN_KBN', 'BUNRUI_DAI', 'BUNRUI_CHU' ] if os.path.isfile(filename): print("ロード") # ★機械学習モデルが存在する場合はロード clf = job.load(filename) else: # ★機械学習モデルが存在しない場合は新規作成 print("新規作成") clf = MLPClassifier(hidden_layer_sizes=10, activation='relu',solver='adam', max_iter=500) print("予測 ") # 戻り値で予測結果を戻す [skl_Data['target'] = df['Bunrui']]なので分類CDが戻る print(clf.predict(skl_Data['data'])) # 戻り値で予測結果を戻す [skl_Data['target'] = df['Bunrui']]なので分類CDが戻る print("正解 ") print(df["BUNRUI_SYO"]) except Exception as E: sys.exit() # 処理終了 # 戻り値格納(正常終了) print("Result {0}".format(ret))

  • 間違いを指摘するのは間違いか

    明らかに変だなぁと思うことを指摘する、ということを咎められます。 最近家族の髪が薄く、美容院に行かずに自分で切っており、ハゲ隠しのように変に髪で隠そうとします。そうすればするほど違和感があり、買い物中に「絶対そこにあるべき髪の毛じゃないからプロに任せてほしい」と言ったところ、人の心がないと言われました。「つまり(自分じゃ気づけないのに)変なままでいいということか?」と聞くと、そんな言い方はないと言われました。「自分自身が変であると理解し、それを承知して選択している状態」であるなら別ですが、教えて欲しくもないそうです。 この他にも色々なことで「人の気持ちがわからない人」と指摘されることがあるのですが、家族以外には全く言われたことがなく、むしろ職場や友人には感謝されることが多いです。たとえばクリーニングのタグが付いたままだったり、「自分で気づけない間違いは教えてもらわないと気づけない」ことは多くあると思います。自分はごく自然に、優しさだけで「それは間違っているんだよ」と教えるのですが、家族には「正論をぶつけないで欲しい」と言われます。 逆の立場で物事を考えろと言われても、自分は器用ではないのでぜひ教えて欲しいと思います。「家出る時から思っていたけど変だよ」と言われるくらいなら、思ったその場で教えて欲しいです。なのに何故それ自体を否定されるのか全く理解ができません。煽ってもいませんし、卑屈で言っている訳でもないのに、毎回有り得ないものを見るような目で見られるのが本当に理解できません。どうしてだろうと思います。家族が怒っていたりすると「その話題でそこまで怒るような大掛かりな話じゃないのにな」と怒りの大きさに疑問も抱きます。 間違いを間違いだと指摘するのは間違いでしょうか?他人に笑われるくらいなら身近な人に教えて欲しいと思わないのでしょうか?ご意見お待ちしております。

  • 間違いがあれば指摘して下さい

    今までニュースで聞いたり見たりしていたけれど、実はよくわかっていなかった放射能についてです。 今回の福島の問題で、ただ原発は怖くて放射能は怖くて、それに当たってしまったら癌になる(放射能なりやすく)とばかり思っていました。 ただ怖がるだけでは意味がないと思い、自分なりにいろいろネットで検索してみて解釈した結果を書くので、間違いがあったら指摘して下さい。 放射能=放射線を出す能力 放射性物質=放射線を出す物質 放射線=人体に被害を及ぼすもの 福島原発の何度かの爆発によって、放射性物質が多量に飛び出して日本の上空に飛んだ その放射性物質が、よく聞くストロンチウムにセシウムにヨウ素 この放射性物質が放射線を発して、人体に危害を加える 福島から放射線物質が24時間毎日多量に飛び出しているわけではなく、爆発があった時に何回か飛び出した放射性物質が、日本の地上に毎落ちて、未だに放射線を発している 放射線を発する放射性物質がその場所からなくなれば放射線が出なくなるので、土の表面を取る除染という行為を行なっている 福島第一原発から24時間毎日出ているのは、原子炉近辺にある放射性物質が発する放射線であり、その放射線が東京や大阪に届いたりすることはない 放射性物質はホコリみたいにふわふわ飛んでいるわけではなく、ある程度重さがあるので、土壌に舞い落ちる 窓をしっかり閉めておけば、風に乗ってふわふわ家の中まで入ってきたりはしない 原発数十キロの範囲に特に放射性物質が多く降り落ちたので、そこから大量の放射線が発生している。そのため住人が避難しなければならなくなった 東京で放射性物質が見つかったとしても、原発周辺に比べたら量が少ないので、発する放射線量も少ないので、避難する必要がない だいたい、いろいろなサイトを読みあさって、こんな感じに理解したのですがあっているでしょうか。間違いがあったら指摘して下さい。そして、知識として足りないことがあれば、それも教えて下さい。 私は今日まで、福島原発からは四六時中セシウムやストロンチウムが飛び出していて、それが福島近辺に毎日降り注いでいるものだと思っていました。だから除染なんて無駄な行為をしてと、いつもテレビを見ながら思っていたのです。毎日放射性物質が飛んでこなければ、除染というのはある程度意味はあるんだと理解できました。 よろしくお願いします。

  • さりげなく間違いを指摘されて恥ずかしかったこと

    思い込み、勘違い、誰にもいろいろあると思います。 そんな時に限って自信たっぷりに言ってることが多いのですが、 「それ違うで~」と遠まわしに、さりげなーく指摘してもらった場合。 ヒジョーに恥ずかしい思いをします。 同時に、指摘してくれた人に感謝。 皆さん、そんなことありませんか? 私はつい先ほど、あるニュース記事を斜め読みして早とちりし、 さりげなくそれを訂正されて今ヒジョーに恥ずかしく思っています。

  • 間違いをご指摘ください。

    p,qは実数、2つのグラフ y=e^xとy=log(x-p)+q のグラフがただ一つ共有点をもつとき、2p-qの最大値を求めよ。 この問題はpとqをtで表して考えていく解法でできることは、前回の質問で教えていただきました。 それとは別に下記のような解答を考えたのですが、どこが間違っているのかよく分かりません。ご指摘ください。 共有点のx座標をx=tとする。2つのグラフはx=tで接することから、 (1)・・e^t=1/(t-p) , (2)・・e^t=log(t-p)+q (1)からt-p=e^(-t) これとe^t=1/(t-p)を(2)に代入して、 1/(t-p)=loge^(-t)+q =-t+q よって、(t-p)(-t+q)=1 ゆえに、t^2-(p+q)t+pq+1=0。 t^2-(p+q)t+pq+1=0 この解が t>pに存在するから、 ア・・軸 (p+q)/2<pのとき、解存在しない イ・・軸 (p+q)/2>pのとき、 判別式=(p+q)^2-4pq-4>=0 よって、pとqの条件をもとめると、q>p+2 この領域で、2p-qを求めようと考えましたが、当然最大値は決まりません。どこが間違っているのかよろしくお願いします。

  • 間違いがあれば指摘してください。

    Adolf Hitler and his wife Eva Braun commit suicide in an underground bunker in Berlin. On May 7, the instruments of the surrender of German forces in WWII were signed by General Jodl. こんにちは。上は私の書いた文です。おかしな点があれば指摘していただきたいのです。

専門家に質問してみよう