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

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

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

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

解決済

CSVの複数列の値を1行ずつ別の変数に代入したいです。

osakanatengoku
osakanatengoku

総合スコア5

Python 3.x

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

2回答

0グッド

0クリップ

291閲覧

投稿2022/11/16 05:36

編集2022/11/16 05:47

前提

AAA.csvには'参照ファイル', '時間コード', '地点コード'の列があります。
これらの列の値を1行ずつ変数a, b, cに代入したいのですがうまくいきません。

実現したいこと

AAA.csvには'参照ファイル', '時間コード', '地点コード'の列があります。
これらの列の値を1行ずつ変数a, b, cに代入したいのですがうまくいきません。

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

今までに試した方法とエラーは以下のようなものです。
ほかにもいくつか試しましたが見つからないので3つだけ書かせていただきます。

for r in df4 : fc = df4.iloc[r,1] print(fc) tc = df4.iloc[r,2] print(tc) ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types
for r in df4 : fc = df4.loc[r,'参照ファイル'] print(fc) tc = df4.loc[r,'時間コード'] print(tc) pc = df4.loc[r,'場所コード'] KeyError: '参照ファイル '
for row in df4.iterrows() : a = df4[row] print(a) typeerrorとかinvalidindexとかたくさん #
for item in zip(df4['参照ファイル'], df4['10分コード'], df4['地点コード']): fc = df4['参照ファイル'] print(fc) tc = df4['10分コード'] print(tc) pc = df4.loc[r,'地点コード'] print(pc) KeyError: '参照ファイル'

試したこと

ネットでpython vlookup csvみたいなことを調べるといくつかサイトが見つかるのですが、初心者すぎてコードの1つ1つの意味が分からず、自分のやりたい方法に合わせるためにどこを変更すればいいのかがわからず進みません。。

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

最終的にやりたいのはAAA.csvと10分ごと、場所ごとの交通量のcsvデータ(1カ月分ごとに1つのファイルに入ったcsvが1年分12個)があり、vlookup的なことをして、AAA.csvに交通量データをくっつけたいです。
AAA.csvには
'参照ファイル':'201701.csv'など
'時間コード':’201701010020’など
'地点コード':’4435’など
のデータが入っており、'参照ファイル'から'時間コード'と'地点コード'が一致する行の'交通量データ'をAAA.csvに追加したいです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

for r in df4 :

このときrに格納されるのはdf4の列名になります。errorの理由は数値で参照しなければならないilocに対して数値以外のデータ(文字列)を持っているrを引数にしているからです。

修正にはこちらのサイトが参考になるでしょう。
https://note.nkmk.me/python-pandas-dataframe-for-iteration/

投稿2022/11/16 05:49

pig_vba

総合スコア650

spoofy_dragon👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

osakanatengoku

2022/11/16 06:21 編集

ありがとうございます。このページも見たのですがまだ理解が足りていません。 for age in df['age']: print(age) # 24 # 42 の部分のコードを参考にして書き換えたのですがエラーが出ます。 これは列名が日本語だからでしょうか。 他のファイルでも日本語の列を扱うので、日本語のまま処理できる方法が分かりましたら教えていただきたいです。 for 参照ファイル in df4[参照ファイル] : fc = ファイルコード print(fc) #NameError: name '参照ファイル' is not defined
pig_vba

2022/11/16 06:30 編集

''忘れですかね。 文字列で抽出したいならilocではなくlocを使ってください。まぁ、今回に限ればmelianさんの手法の方が簡潔に済ませられると思うのであちらを参考にした方がいいとは思います
osakanatengoku

2022/11/16 10:44

”はつけていましたので何か違う原因があると思います。 もう少し調べてみます。 ありがとうございます。

0

ベストアンサー

for文?で1行ずつ、 a = '201701.csv' b = 201701010020 c =4435 という風に入れたいです。

python

1import pandas as pd 2import io 3 4csv_data = ''' 5参照ファイル,時間コード,地点コード 6201701.csv,201701010020,4435 7201702.csv,201701010030,4445 8201703.csv,201701010040,4455 9''' 10df = pd.read_csv(io.StringIO(csv_data)) 11 12# 13for a, b, c in df.values: 14 print(f'{a = }, {b = }, {c = }') 15 16#a = '201701.csv', b = 201701010020, c = 4435 17#a = '201702.csv', b = 201701010030, c = 4445 18#a = '201703.csv', b = 201701010040, c = 4455

投稿2022/11/16 05:55

編集2022/11/16 06:14
melian

総合スコア16252

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

osakanatengoku

2022/11/16 06:06 編集

コメントありがとうございます。 いえ、1つの値を1つの変数に入れたいです。 正しく表現できているか分かりませんが、for文?で1行ずつ、 a = '201701.csv' b = 201701010020 c =4435 という風に入れたいです。
melian

2022/11/16 06:14

了解です、修正しました。
osakanatengoku

2022/11/16 06:56

すみません、エラーは出ないのですが実行してもprintの出力がありません。。
melian

2022/11/16 07:01

その場合、おそらく df の中身が空(カラ)なのではないかと思います。
osakanatengoku

2022/11/16 07:13 編集

csvファイルの例は一部を切り取ったものでもともとはもっと大きいのでファイルパス?を指定して読み取るようにしたいです。 (csv_data = ''' 参照ファイル,時間コード,地点コード 201701.csv,201701010020,4435 201702.csv,201701010030,4445 201703.csv,201701010040,4455 '''の部分を直接コードに書くと結果がちゃんと出ました)
melian

2022/11/16 07:18

そうなりますと、 df = pd.read_csv('ファイルパス') としてみて下さい。
osakanatengoku

2022/11/16 07:48 編集

たぶん行けました。ありがとうございます。 この代入の仕方はなんと言うのでしょうか。代入の部分で列名や列番号を書いていないので不思議な感じです。 また他にも列があって必要な列の値だけを取り出して代入したいときはどうすればよいのでしょうか。 (厚かましいですが調べ方だけでも教えていただけないでしょうか。)
melian

2022/11/16 07:53

Python では unpack(アンパック) と呼ばれている機能です。リストやタプル、辞書などの要素を展開して変数に割り当ててくれます。他にも列がある場合には、例えば全体で 7 列あって、1, 2, 3, 5, 7 列目を取り出すには以下の様にします(不要な列にはアンダースコアを入れます)。 for a, b, c, _, d, _, e in df.values: ただ、列数が多い場合には煩雑になりそうです。
osakanatengoku

2022/11/16 10:46

ありがとうございました。 よくわかりました。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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