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

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

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

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

pandas

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

Q&A

解決済

1回答

803閲覧

df.ilocで謎の数が出力されてしまう

babaa

総合スコア4

Python

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

pandas

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

0グッド

0クリップ

投稿2023/03/19 05:58

編集2023/03/19 06:13

実現したいこと

UZUDOのデータを取得してグラフを作成を作成したいと考えています.そのためにdf.ilocで特定の値を取り出したいと考えています.

前提

こちらのデータはPIV解析画像の約18000pixelから読み取った速度や渦度などのデータとなります.一つのエクセルデータに1秒分のデータが入っているため,100個のエクセルデータを読み取って100秒での渦度の遷移をグラフ化しようと試みています.やることはテキストファイルをデータフレームで読み込み,特定の条件の値を読み取ることとなります.

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

データフレームで表示されている値と違う値がdf.ilocで出力される.

該当のソースコード

python

1df = pd.read_table( 2 filename, 3 encoding="shift-jis", 4 sep=",", 5 skiprows=[0,1,2,3,4,5,6,7,8,9], 6 names=["NoJ","NoI","startX","startY","endX","endY","velocity","degree","velocityX","velocityY","UZUDO","HASSANRYO"]) 7 8print(df) 9print(df.iloc[0,8]) 10

試したこと

ぐぐってもこの問題に似たものが出てきませんでした.df.locを使うとKey errorがでてしまってどちらもうまくいきませんでした.データ数が多いのが原因なのかもしれません.

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

print(df)の出力結果
startX startY endX endY velocity degree velocityX velocityY UZUDO HASSANRYO
0 20.0 320.0 16.423 320.001 0.088 179.992 -0.088 0.000 0.000 0.000
1 25.0 320.0 21.576 319.631 0.085 -173.843 -0.084 -0.009 0.000 0.000
2 30.0 320.0 26.265 319.340 0.093 -169.973 -0.092 -0.016 0.000 0.000
3 35.0 320.0 31.568 319.111 0.087 -165.474 -0.084 -0.022 0.000 0.000
4 40.0 320.0 36.708 319.001 0.085 -163.116 -0.081 -0.025 0.000 0.000
... ... ... ... ... ... ... ... ... ... ...
18099 1235.0 680.0 1234.669 678.687 0.033 -104.173 -0.008 -0.032 0.002 0.005
18100 1240.0 680.0 1239.694 678.688 0.033 -103.125 -0.008 -0.032 0.006 -0.005
18101 1245.0 680.0 1244.768 679.017 0.025 -103.256 -0.006 -0.024 0.212 0.183
18102 1250.0 680.0 1249.707 678.866 0.029 -104.494 -0.007 -0.028 -0.061 -0.121
18103 1255.0 680.0 1254.728 678.216 0.044 -98.672 -0.007 -0.044 -0.299 -0.481

print(df.iloc[0,8])の出力結果
-1.173

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

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

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

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

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

melian

2023/03/19 07:52

read_table で以下のカラム名を指定してますが、df の表示結果に "NoJ" と "NoI" が含まれていません。これは質問文を作成する際の転記ミスでしょうか? names=["NoJ","NoI","startX","startY","endX","endY","velocity","degree","velocityX","velocityY","UZUDO","HASSANRYO"])
jbpb0

2023/03/19 10:39

コードの最後に下記を追加して実行したら、何て表示されますでしょうか? print(df.info())
babaa

2023/03/19 10:54

コメントありがとうございます。No.JとIは最初のテキストで乗っている番号で、使わないため最初に削除するコードを設けています。また、問題はvscodeを開き直してみたら問題なく動きました。なぜ謎の数が出力されたかは不明ですが...
guest

回答1

0

ベストアンサー

まず、データの読み込み部分は問題なさそうです。print(df)で正常に出力されていることがわかります。
しかし、print(df.iloc[0,9],number)で謎の数が出力されているということですが、このコードでは number という変数が定義されていません。

print(df.iloc[0,9]) の出力結果が -1.173 となっており、これはデータフレームの最初の行(インデックス0)と10番目の列(インデックス9)の値です。これはvelocityYの列の値です。

もし他の列の値を取得したい場合は、インデックスを変更してください。
例えば、velocityの値を取得したい場合は、print(df.iloc[0, 6])とします。

また、number変数が定義されていないため、print(df.iloc[0,9],number)の部分でエラーが発生していると思われます。number変数を定義してから再度実行してみてください。
どのような値を出力したいかによって、number変数の定義が異なります。
もし具体的に何をしたいか教えていただければ、より具体的な回答ができるかと思います。

投稿2023/03/19 06:01

quiz

総合スコア269

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

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

babaa

2023/03/19 06:19

問題点追記しました.先程記入していたnumberはファイル番号とデータが一致しているかを確認するために記入していました.例50番目(50秒目)のデータならば0.05,50みたいに表示されます.ですのでnumberに問題はありません. 続いてdf.iloc[0,9]ではindex = 1, colums = 9番目のHASSANRYOが得られると思っていましたが認識違いですか? 状況をわかりやすいように追記しましたので,改めて検討していただけると幸いです
quiz

2023/03/19 06:26 編集

この問題を解決するために、まずはdf.head()を使ってデータフレームの最初の5行を表示してみてください。 これにより、データフレームの最初の数行が正しく表示されていることを確認できます。 print(df.head()) 次に、ilocを使わずにlocを使って値を取得してみてください。 インデックス0のHASSANRYOの値を取得するには、以下のように書きます。 print(df.loc[0, "HASSANRYO"]) おっしゃる通り、print(df)の出力結果とprint(df.iloc[0,9])の出力結果が一致していないことが問題のようですね。この問題を解決するために、まずはdf.head()を使ってデータフレームの最初の5行を表示してみてください。これにより、データフレームの最初の数行が正しく表示されていることを確認できます。 print(df.head()) 次に、ilocを使わずにlocを使って値を取得してみてください。インデックス0のHASSANRYOの値を取得するには、以下のように書きます。 print(df.loc[0, "HASSANRYO"]) これで、print(df)の出力結果と同じ値が表示されるはずです。 もしlocを使っても正しい値が取得できない場合は、データフレームのインデックスが連続していない可能性があります。 インデックスをリセットしてから再度ilocやlocを使って値を取得してみてください。 df.reset_index(drop=True, inplace=True) print(df.iloc[0, 9]) これで、ilocで取得される値が正しくなるはずです。 それでも問題が解決しない場合は、データの読み込み時に問題が発生している可能性がありますので、再度データの読み込み部分を見直してみてください。
babaa

2023/03/19 10:55

ありがとうございます。データの読み込みを見直すと言いますか、vscodeを再起動させてみたところ何故かうまく動きました!親身にありがとうございましたm(*_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問