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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

Q&A

解決済

4回答

834閲覧

条件に合うcsvファイルの行を表示・書き込みたい

farinelli

総合スコア61

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

0グッド

0クリップ

投稿2019/08/29 15:48

編集2019/08/30 07:48

csvファイルの行毎の最大値がその行の2番目に大きい値の2倍を超える行に限り、その行の要素(Name,最大値が存在数る列の要素(One~Five),最大値)を表示した上で、新規作成したcsvファイルに該当する行の全ての要素を書き込むようなコードを書こうとした際、以下のエラーが出ました。
下記のような出力結果を得る為にお知恵をお貸しいただけますと幸いです。宜しくお願いします。

理想の出力結果

#ターミナル上の出力 [A,"Three",14] [C,"Three",12] [D,"Four",14] [E,"Four",12] [F,"One",10] #作成するcsvファイルの中身 Name,One,Two,Three,Four,Five A,3,3,14,4,2 C,3,2,12,4,3 D,2,4,5,14,6 E,4,3,5,12,4 F,10,2,3,4,2

エラー

Traceback (most recent call last): File "/Users/macuser/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2897, in get_loc return self._engine.get_loc(key) File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: ('A', 'Three', 14) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "zoki.py", line 14, in <module> df2 = df[idx, score.index[0], score[0]] File "/Users/macuser/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/frame.py", line 2980, in __getitem__ indexer = self.columns.get_loc(key) File "/Users/macuser/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2899, in get_loc return self._engine.get_loc(self._maybe_cast_indexer(key)) File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: ('A', 'Three', 14)

コード

comp2.py

1import pandas as pd 2df = pd.read_csv('renshu.csv', index_col='Name') 3for idx, row in df.iterrows(): 4 score = row['One':'Five'].sort_values(ascending=False) 5 df2 = df[idx, score.index[0], score[0]] 6 df3 = df[score.iloc[0] >= score.iloc[1] * 2] 7 print(df2) 8 df3.to_csv("score.csv")

ファイル

renshu.py

1Name,One,Two,Three,Four,Five 2A,3,3,14,4,2 3B,3,8,2,4,5 4C,3,2,12,4,3 5D,2,4,5,14,6 6E,4,3,5,12,4 7F,10,2,3,4,2

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

iOS 10.14.6, Python 3.7.4, Atom

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

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

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

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

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

can110

2019/08/29 22:08 編集

NameError: name 'tmp' is not defined が発生します。 実行、検証可能なコードを提示ください。 ①行毎の最大値がその行の2番目に大きい値の2倍を超える行に限り ②その行の要素(Name,最大値が存在数る列の要素(One~Five),最大値)を表示 ③新規作成したcsvファイルに書き込む のうち、どれがどのように分からないのかを記載ください。
meg_

2019/08/29 23:31

print(df2)の出力結果も掲載してください。
farinelli

2019/08/30 06:33

can110様: ・②が表示されない事に関して、df2 = df[idx, score.index[0], score[0]]が間違っているとは思うがどう直せばいいのか分からない ・③をしようとした際にファイルが作成されない事に関して、該当の行(df3 = df[score.iloc[0] >= score.iloc[1] * 2])も然りです。 meg_様 print(df2)の出力結果に関して、KeyError: ('A', 'Three', 14)というものが出ているものの、どういう状態でどうすれば解決するのか、もしご存知でしたら教えて頂けますと幸いです。
guest

回答4

0

初回のループで、下記コードは

python

1df2 = df[idx, score.index[0], score[0]]

idxが「0"A"」、score.index[0]が「Three」、score[0]が「14」となります。

ここまでは理解されているでしょうか?

投稿2019/08/30 07:03

編集2019/08/30 09:07
meg_

総合スコア10579

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

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

farinelli

2019/08/30 07:07

すみません、idxが「0」というのが理解できなかったです。idxはAではないのでしょうか?
meg_

2019/08/30 07:26

列データを取りたいのなら、df["One"]などになりますし、行データを取りたいのなら、df[0:3]などになります。 df["A","Three",14]ですとどちらの条件にも合いません。 行データの降順ソート後に何をしたいのでしょうか?
farinelli

2019/08/30 08:16

行データの降順ソートというのはscore = row['One':'Five'].sort_values(ascending=False)の部分、という認識で正しかったでしょうか? if文以下の処理に備え、各行の数値データの最大値を求めてscore[0]に格納しようとしていました。 idxに関係ある話かは分かりませんが、、、
meg_

2019/08/30 09:09

すみません。0ではなく"A"でした。修正前のコードを送信してしまいました。
meg_

2019/08/30 09:13

ソートの部分は良いと思います。 下記で本来欲しいのはどんな値をですか? df2 = df[idx, score.index[0], score[0]]
farinelli

2019/08/30 10:21

["A","Three",14]です。
guest

0

ほとんどこの回答を2次元リスト化して CSVに書き出すだけかと思うのですが。

  • 2次元リスト化する : list.append() で空のリストに追加して行けば良い
  • CSVに書き出す : DataFrame化してDataFrame.to_csv()がとりあえずは簡単

です。

Python

1import pandas as pd 2df = pd.read_csv('renshu.csv', index_col='Name') 3result = [] 4for idx, row in df.iterrows(): 5 score = row['One':'Five'].sort_values(ascending=False) 6 if score.iloc[0] >= score.iloc[1] * 2: 7 result.append([idx, score.index[0], score.iloc[0]]) 8pd.DataFrame(result).to_csv('out.csv', header=None, index=None)

投稿2019/08/29 23:30

magichan

総合スコア15898

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

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

farinelli

2019/08/30 06:41

有難うございます。勉強になります。 後出しで恐縮ですが、説明文と理想の出力結果を一部変更したのでご確認頂けますと幸いです。 宜しくお願いします。
guest

0

自己解決

無我夢中で書いたら動きました.お騒がせしました.(私信:zoki.py参照)

投稿2019/10/09 06:42

farinelli

総合スコア61

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

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

0

「質問者が5日前に「まだ回答を求めています」と言っています。」と teratail から回答するよう促されているので、meg_ さんが書かれていることをもう一度説明してみます。
前提として、問題を切り分けられた方が回答を得やすくなるのではないかと思います。回答者の方々の応答を見る限り、質問では2つの問題が混同されています。

  • csv の行の処理ができない。
  • pandas の read_csv() で読み込んだ変数 df のキー指定が失敗している。

エラーは2つ目の問題で1つ目は無関係です。回答する側として、この質問内容を理解するのがとても困難でした(「まだ回答を求めています」と繰り返し何度も何度もteratailがメッセージを出さなければ、理解をあきらめていました)。
変数 df のキー指定はヘッダ行の値(この例では 'Name', 'One' など)が必要なので、df2 = df[idx, score.index[0], score[0]] のようにヘッダ行でない値(idx, score.index[0] など)を指定しているのが、原因ではないですか?
pandas の read_csv() の説明1
pandas の read_csv() の説明2
まだ回答を求められるのであれば、df のキー指定をヘッダ行の値で行うよう、質問に書いてあるコードを更新し、エラーと行の処理を切り分けて質問されないと、回答を得るのは難しいのではないかと思います。

投稿2019/09/06 09:56

maq

総合スコア41

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問