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

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

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

Q&A

解決済

2回答

714閲覧

python for二重ループにおいて IndentationError: unexpected indent が発生する

suica103

総合スコア1

0グッド

0クリップ

投稿2023/11/07 10:47

実現したいこと

IndentationError: unexpected indent のエラーが生じてしまう原因がわかりません

前提

python初心者です.

あるフォルダ内のcsvの連番ファイルすべてに同一の処理を行い(一列の縦ベクトルで出力),一つのcsvファイルにA列から一列ずつ並べたいです.

csv内の数値を一列の縦ベクトルに変換する際にforを使用し,それをすべてのファイルで行うためにforを使用しますが,その際に以下の様なインデントエラーが発生します.

一つのファイルに対しての処理は正常に動作しましたが,forですべてのファイルに対して同じ処理を行おうとするとエラーが発生します.二つ目のfor以降でエラーが起きてしまいます.

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

for unique_value in dft[0].unique():  ~ ~ result_df[f'Column_{i}'] = vector まですべてに IndentationError: unexpected indent が発生してしまいます. 以下は一つのファイルに対して行った処理です.正常に動作しました. import pandas as pd import numpy as np # Excelファイルを読み込みます csv_file_path = 'F:\\PIVlabaveisou_1.csv' df = pd.read_csv(csv_file_path, header=None, usecols=[0, 1, 2, 3], encoding="SHIFT-JIS") dft = df.fillna('0') # Create an empty dictionary to store the matrix data for the 2nd and 3rd columns matrix_data_2nd_col = {} matrix_data_3rd_col = {} # Iterate through unique values in the first column for unique_value in dft[0].unique(): group = dft[dft[0] == unique_value] # Get values from the 2nd and 3rd columns (0-based index) values_2nd_col = group[2].values values_3rd_col = group[3].values matrix_data_2nd_col[unique_value] = values_2nd_col matrix_data_3rd_col[unique_value] = values_3rd_col # Create DataFrames from the dictionaries matrix_2nd_col = pd.DataFrame.from_dict(matrix_data_2nd_col, orient='index') matrix_3rd_col = pd.DataFrame.from_dict(matrix_data_3rd_col, orient='index') # Concatenate matrix_3rd_col below matrix_2nd_col combined_matrix = pd.concat([matrix_2nd_col, matrix_3rd_col], axis=0) # DataFrameをNumPy配列に変換してから縦ベクトルに変換 vector = combined_matrix.stack() print(vector) # Save the vector as a CSV file vector_df = pd.DataFrame(vector, columns=["CombinedData"]) vector_df.to_csv('F:\\piv\\vector1.csv', index=False, header=False)

該当のソースコード

python

1import pandas as pd 2import os 3 4# フォルダのパス 5folder_path = 'F:\\piv' 6 7# 結果を格納する空のDataFrameを初期化 8result_df = pd.DataFrame() 9 10# 連番ファイルを順に処理 11for i in range(1, 270): # (1,n) nはファイルの数(適切な値に置き換え) 12 # ファイル名を生成 13 file_name = os.path.join(folder_path, f'PIVlabaveisou_{i}.csv') 14 15 # CSVファイルを読み込み、NaN値を'0'で埋める 16 df = pd.read_csv(file_name, header=None, usecols=[0, 1, 2, 3], encoding="SHIFT-JIS") 17 dft = df.fillna('0') 18 19 # Create an empty dictionary to store the matrix data for the 2nd and 3rd columns 20 matrix_data_2nd_col = {} 21 matrix_data_3rd_col = {} 22 23 # Iterate through unique values in the first column 24 for unique_value in dft[0].unique(): 25 group = dft[dft[0] == unique_value] 26 27 # Get values from the 2nd and 3rd columns (0-based index) 28 values_2nd_col = group[2].values 29 values_3rd_col = group[3].values 30 31 matrix_data_2nd_col[unique_value] = values_2nd_col 32 matrix_data_3rd_col[unique_value] = values_3rd_col 33 34 # Create DataFrames from the dictionaries 35 matrix_2nd_col = pd.DataFrame.from_dict(matrix_data_2nd_col, orient='index') 36 matrix_3rd_col = pd.DataFrame.from_dict(matrix_data_3rd_col, orient='index') 37 38 # Concatenate matrix_3rd_col below matrix_2nd_col 39 combined_matrix = pd.concat([matrix_2nd_col, matrix_3rd_col], axis=0) 40 41 # 縦ベクトルに変換 42 vector = combined_matrix.stack() 43 44 # Add the vector as a new column to the result DataFrame 45 result_df[f'Column_{i}'] = vector 46 47# Save the combined results as a single CSV file 48result_df.to_csv(os.path.join(folder_path, 'combined_results.csv'), index=False)

試したこと

・pythonの再起動
・インデントを削除し再度半角で入れ直し

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

Python 3.12.0

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

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

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

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

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

TakaiY

2023/11/07 11:19 編集

ファイルに問題はなさそうです。 > pythonの再起動 とありますが、これはどういう操作をしたのですか? > まですべてに IndentationError: unexpected indent が発生してしまいます. とありますが、「すべてに」というのはどういう意味ですか? このファイルの内容をどのように実行していますか?
suica103

2023/11/07 11:39

・再起動,このファイルの実行方法について >コマンドプロンプトでexit()を入力して再度pythonと入力し,起動しました ・二番目のfor(24行目)の後から result_df[f'Column_{i}'] = vector まで(45行目)の間のコードそれぞれにIndentationError: unexpected indent が表示されてしまいます.(24~45行目までの各コードに合計11個の同様のエラー)
winterboum

2023/11/07 11:51

27行目のコメントのインデントを合わせてみるとどうなります?
quickquip

2023/11/07 11:52

何を使っていて、何をした時に、どこに メッセージが出るのか? という情報がないのですが、スクリーンショットの方が早いかもしれません
suica103

2023/11/07 14:53

皆様のおかげで無事エラーがでることなく一つのcsvファイルに出力できたのですが,なぜか1つ目のファイルの数値のみがまったく異なる値で出力されてしまいました.なにかコードに不具合あるのでしょうか.
guest

回答2

0

ベストアンサー

下に添付したイメージは質問のコードを選択状態にした時のものです。
これを見ると分かりますが、
22行目 37行目 40行目 43行目の先頭に空白4つ
26行目 30行目 の先頭に空白8つ
33行目 の先頭に空白4つまたは空白8つ
が必要です。

14行目 18行目は空白4つが入っているおかげで「for文が継続している」とPython対話環境が判断してくれています。ですが22行目が空行なため「ここでfor文が終わっている」と判断され、24行目のfor文が冒頭空白4つで始まっていることに対してIndentationErrorが出たのだと推測します。
エラーが出たというfor unique_value in dft[0].unique(): が24行目であることと合致します。

対話環境では空行が「文の終わり」のマークになるため、空行を含むような複数行を入力することはできません。しっかりとインデントが空白で表されているコードを入力する必要があります。

イメージ説明

投稿2023/11/07 12:17

quickquip

総合スコア11299

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

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

suica103

2023/11/07 14:49

ありがとうございます.エラーがでることなく実行できました.勉強になりました.
guest

0

・再起動,このファイルの実行方法について
> コマンドプロンプトでexit()を入力して再度pythonと入力し,起動しました

この記述からすると、実行方法が間違えているのが原因です。

質問者さんは、たぶん、ターミナルにpythonとと打ち込んで出てくる>>> のところ、
以下のような出力の>>>のところに、コードをコピペしているのだと推測します。

shell

1Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] on win32 2Type "help", "copyright", "credits" or "license" for more information. 3>>>

この方法は、小さなプログラムなら実行することはできますが、少し大きなプログラムになると難しくなります。

正しい実行方法は、いくつかありますが、以下の方法は基本なのでできるようにしておくべきです。

  • 「再度pythonと入力」するところで、ソースコードのあるディレクトリ(フォルダ)に移動する。
    通常はcdコマンドを使います。
  • そこで、以下のように、ファイルを指定してpythonを起動する
    python ソースコードのファイル名

です。

ちなみに、一般的には「コマンドプロンプト」とは、「再度pythonと入力」する場で、ターミナルなどとも呼ばれます。

投稿2023/11/07 11:56

編集2023/11/07 11:58
TakaiY

総合スコア14324

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

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

suica103

2023/11/07 14:48

そうだったのですね!勉強になりました.ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問