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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

Q&A

解決済

2回答

1559閲覧

Pythonでデータフレームでの繰り返し処理の方法を知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

0グッド

0クリップ

投稿2017/09/25 12:53

###前提・実現したいこと
レベルがかなり低いことを承知で質問します。
pandasで読み込んだCSVをデータフレーム化した後の繰り返し処理についての質問です。
私がやりたいことは以下のような処理です。
csvのC列1行目÷A列1行目をし、列で繰り返し処理をした後、D列1行目÷A列1行目の処理、E列1行目÷A列1行目・・・というように、A列固定で割り算を繰り返していく処理をしたいです。

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

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
Python3系

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

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

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

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

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

namnium1125

2017/09/25 15:59

発生した問題等を書いていただきたいです。今のままだと「〜したい」ということしか書いておらず、他の回答者様から「やってほしいことだけを記載した丸投げの質問」であると言われかねません。投稿後も編集できますから、もう少し形を整えてみてはいかがでしょうか?
guest

回答2

0

ベストアンサー

計算した結果は、元の場所に書き戻すのでよいのでしょうかね?

とりあえず

C列1行目÷A列1行目をし、列で繰り返し処理をした後

この部分は特に繰り返し処理を行う必要がなく、単に df['C'] / df['A'] と記述するだけで全ての列を計算を行い、結果が1次配列(Series) で戻ります。
ですので、結果をそのままC列に書き戻すのであれば、

Python

1df['C'] = df['C'] / df['A']

のように記述してください。同様に他の列も

Python

1df['D'] = df['D'] / df['A'] 2df['E'] = df['E'] / df['A'] 3# 以下繰り返し

のように記述することで、目的が達せられるかと思います。

しかし上記のようにC列~F列の計算を全て併記するのはかったるいので、ループで処理で行いたいというのであれば、方法はいくつか有りますが、単にカラム名のリストを使って

Python

1for name in ['C','D','E','F']: 2 df[name] = df[name] / df['A']

が一番簡単です。

また、for name in df: のように記述すると、全てのカラム名でループすることができますので、A列だけ除外して

Python

1for name in df: 2 if name == 'A': 3 continue 4 df[name] = df[name] / df['A']

のように記述することもできます。

投稿2017/09/25 23:44

magichan

総合スコア15898

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

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

namnium1125

2017/09/26 03:44 編集

dfごと回せたんですね。。(^ ^; 勉強になりました。 m(_ _)m
退会済みユーザー

退会済みユーザー

2017/09/26 11:02

お二人のおかげで、私がやりたかったことが全てできました! ありがとうございました! あと、分かりづらい質問で失礼いたしました。 質問の仕方の勉強にもなりました。
guest

0

とりあえず質問者様が書いてくださった内容をもとに勝手に回答してみます。

csvのC列1行目÷A列1行目をし、列で繰り返し処理をした後、

の部分について、具体的な列での繰り返し処理の内容を下さらなかったので、すべて割り算と判断しました。

回答したコードは

  • C〜D列1行 ÷ A列1行 = C〜D列1行答え
  • C〜D列2行 ÷ A列2行 = C〜D列2行答え
  • C〜D列3行 ÷ A列3行 = C〜D列3行答え




を求めるものです。

「そうではなくこういうことがしたいんです」や、「ここってどういう意味ですか?」と言いたくなるようなことがあれば、返信ください。m(_ _)m

lang

1import pandas as pd 2 3# csvファイルの読み込み 4testDf = pd.read_csv("test.csv") 5 6# ここでは以下のようなファイルを読み込んだとする 7"""test.csv 8 A B C D E F 90 1 hoge 3 2 1 2 101 7 hoge 1 7 4 2 112 3 hoge 4 1 1 3 123 2 hoge 1 8 4 6 134 0 hoge 5 2 2 0 145 5 hoge 9 8 1 6 156 0 hoge 2 1 3 7 167 8 hoge 6 8 5 9 178 0 hoge 5 2 6 7 18""" 19 20# 結果を格納するための辞書 21resultDic = {"C":[], 22 "D":[], 23 "E":[], 24 "F":[]} 25 26for i,rw_A in enumerate(testDf["A"]): # iに行数、rw_A(A列の1行)に分母 27 if rw_A != 0: 28 for col in resultDic.keys(): 29 # 質問者様の要望(列ごとの繰り返し)には沿っていないが、行ごとに割り算を実行(行ごとに繰り返し) 30 resultDic[col].append(testDf[col][i]/rw_A) 31 32 else: # 分母が0の時はNaNを代入 33 for col in resultDic.keys(): 34 resultDic[col].append("NaN") 35 36# 結果からDataFrameを作成 37resultDf = pd.DataFrame(resultDic) 38# csvファイルにセーブ 39resultDf.to_csv("result.csv") 40 41"""result.csv 42 C D E F 430 3 2 1 2 441 0.142857 1 0.571429 0.285714 452 1.33333 0.333333 0.333333 1 463 0.5 4 2 3 474 NaN NaN NaN NaN 485 1.8 1.6 0.2 1.2 496 NaN NaN NaN NaN 507 0.75 1 0.625 1.125 518 NaN NaN NaN NaN 52"""

投稿2017/09/25 16:09

編集2017/09/25 16:29
namnium1125

総合スコア2043

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問