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

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

Q&A

解決済

2回答

227閲覧

リストの要素値がすべて0である行を削除したい

yyicp

総合スコア82

Python

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

1グッド

0クリップ

投稿2025/07/29 02:10

1

0

実現したいこと

「該当のソースコード」の18行目までは正しく回ります。
3行目でリストmatrixの中身を与えているのをファイル読み込みにしたいと思い、15行目以下のコードを書きましたが、22行目が正しく動きませんでした。どなたかコードを直してください。

R.csvは以下のようなファイルです。
1 2 3 4
0 0 0 0
5 6 7 8
0 0 0 0

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

Traceback (most recent call last): File "〇〇〇\testCV526.py", line 22, in <module> R = R[~np.all(matrix == 0, axis=1)] ~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: only integer scalar arrays can be converted to a scalar index

該当のソースコード

python

1import numpy as np 2 3matrix = np.array([[1, 2, 3, 4], 4 [0, 0, 0, 0], 5 [5, 6, 7, 8], 6 [0, 0, 0, 0]]) 7 8# 値が全て0の行を削除 9matrix = matrix[~np.all(matrix == 0, axis=1)] 10print(matrix) 11#[[1 2 3 4] 12# [5 6 7 8]] 13 14############################# 15import pandas as pd 16 17R = pd.read_csv("R.csv",header=None).values.tolist() 18print(R) 19#[[1, 2, 3, 4], [0, 0, 0, 0], [5, 6, 7, 8], [0, 0, 0, 0]] 20 21# 値が全て0の行を削除 22R = R[~np.all(matrix == 0, axis=1)]

試したこと

こちらを参考にして、20行目に

python

1R = R.values

と入れてみましたが、以下のようなエラーが出てしまいました。

Traceback (most recent call last):
File "〇〇〇\testCV526.py", line 20, in <module>
R = R.values
^^^^^^^^
AttributeError: 'list' object has no attribute 'values'

melian👍を押しています

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

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

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

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

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

guest

回答2

0

np.loadtxt() を使えば,(ソースコード前半部の matrix に合わせて)R も配列として読み込むことができます。下記に記述例を示します。

なお,22行目の matrixR の間違いと思われるので変更しています。

Python

1import numpy as np 2 3R = np.loadtxt('R.csv', dtype=int) 4print(R) 5# [[1 2 3 4] 6# [0 0 0 0] 7# [5 6 7 8] 8# [0 0 0 0]] 9 10# 値が全て0の行を削除 11R = R[~np.all(R == 0, axis=1)] 12print(R) 13# [[1 2 3 4] 14# [5 6 7 8]]

投稿2025/07/29 10:08

編集2025/07/29 10:22
little_street

総合スコア471

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

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

yyicp

2025/07/30 01:18

私の環境では、3行目を R = np.loadtxt('R.csv', dtype=int, delimiter=',') とすることで、できました。 どうもありがとうございました。
guest

0

ベストアンサー

最終的な結果は Numpy の ndarray にしています。

python

1R = pd.read_csv("R.csv",header=None) 2print(R) 3 4# 値が全て0の行を削除 5R = R[~R.eq(0).all(axis=1)].to_numpy() 6print(R) 7 8# 0 1 2 3 9# 0 1 2 3 4 10# 1 0 0 0 0 11# 2 5 6 7 8 12# 3 0 0 0 0 13# 14# [[1 2 3 4] 15# [5 6 7 8]]

投稿2025/07/29 02:28

melian

総合スコア21343

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

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

yyicp

2025/07/29 02:35

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

2025/07/29 02:40

① R = pd.read_csv("R.csv",header=None).values.tolist() と ② R = pd.read_csv("R.csv",header=None) の使い分けがよく分からないのですが、こういうときは①で、こういうときは②、の基準はあるのでしょうか。もしありましたら教えていていただけますでしょうか。
melian

2025/07/29 02:57

① の場合は Python のリストになるので Pandas のメソッドを利用することができません。具体的には ① に変更して実行すると、R.eq(0) の部分で以下のエラーが発生します。 AttributeError: 'list' object has no attribute 'eq' # Python のリストには eq() メソッドがない
yyicp

2025/07/29 03:04

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問