質問するログイン新規登録

Q&A

解決済

2回答

310閲覧

ファイルに一回書き出してそれを読み込めば正しく回るのですが、それを避けたいです

yyicp

総合スコア96

Python

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

1グッド

0クリップ

投稿2025/12/15 07:49

1

0

実現したいこと

M1.csvは以下のようなファイルです。

1 0 2

M2.csvは以下のようなファイルです。

3 0 4

M1.csvとM2.csvを横にくっつけて、要素値が0の行を削除したいと考えています。欲しい結果は以下の通りです。

1 3 2 4

「該当のソースコード」の状態ではエラーが出ます。「試したこと」のようにすれば解決するのですが、計算時間短縮のためにも書き出すことは避けたいです。どなたかコードを直してください。

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

Traceback (most recent call last): File "〇〇〇\testCV573.py", line 27, in <module> C2 = C[np.ix_(~np.all(C == 0, axis=1), ~np.all(C == 0, axis=0))] ~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "〇〇〇\pandas\core\frame.py", line 4113, in __getitem__ indexer = self.columns.get_loc(key) File "〇〇〇\pandas\core\indexes\range.py", line 417, in get_loc raise KeyError(key) KeyError: (array([[0], [2]]), array([[0, 1]]))

該当のソースコード

python

1import numpy as np 2import pandas as pd 3import glob 4 5files = glob.glob('M*.csv') 6print(files)#['M1.csv', 'M2.csv'] 7 8C = [] 9 10# ファイルを一つずつ読み込み、リストに追加 11for file in files: 12 df = pd.read_csv(file, header=None) 13 C.append(df) 14 15# DataFrameを横に結合 16C = pd.concat(C, axis=1, ignore_index=True) 17 18C2 = C[np.ix_(~np.all(C == 0, axis=1), ~np.all(C == 0, axis=0))] 19np.savetxt('C2.csv', C2, delimiter=",", fmt='%f')

試したこと

17行目に以下を入れると回るのですが、できれば一回書き出すことはしたくないです。

python

1filenamecsv = "C.csv" 2np.savetxt(filenamecsv, C, delimiter=",") 3C = np.loadtxt('C.csv', dtype=float, delimiter=',')
melian👍を押しています

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

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

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

guest

回答2

0

17行目に以下を入れると回るのですが、できれば一回書き出すことはしたくないです。

そのコードの前後で変数Cのオブジェクトがpandas.Dataframeからnumpy.ndarrayに変わっているかと思いますが気付かれていますか?
オブジェクトが変わればコードの書き方も変わります。どちらかのオブジェクトに統一してコードを書いた方が良いかと思います。

※ もちろん両方のオブジェクトを使用しても良いのですが質問者さんは混乱されているようなのでまずはひとつの書き方をマスターされた方が良いかと思います。

投稿2025/12/15 08:40

meg_

総合スコア11064

yyicp

2025/12/15 09:08 編集

ご回答ありがとうございます。 気づいていなかったです。今までオブジェクトを意識したことが正直ないので、うまくいかないときにオブジェクトを意識してみたいと思います。
guest

0

ベストアンサー

Pandas で要素値が0の行を削除します。

python

1# DataFrameを横に結合 2C = pd.concat(C, axis=1, ignore_index=True) 3C2 = C[~C.eq(0).all(axis=1)].to_numpy() 4print(C2) 5 6# [[1 3] 7# [2 4]]

投稿2025/12/15 08:50

melian

総合スコア21611

yyicp

2025/12/15 09:00

できました。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問