🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

2回答

3152閲覧

2次元配列で特定の行だけを抽出したい

Lily1007

総合スコア10

Python

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

0グッド

0クリップ

投稿2020/12/20 14:05

Pythonで2次元配列の特定の行だけを抽出したい

Python初心者です。
あるdata
data = [[1,2,3,4],[2, 2.1, 3.1, 4.1], [3, 2.2, 3.9, 5.7]...[10, 2.9, 3.9, 4.9]]
のような2次元配列があるとします。
ここで,各列に関してid, mass, temparature, densityのような値が入っています。

このとき(mass>3.4 & density>5.0)を満たす行だけを抽出したいです。

data1 = data(where((data[:, 9]< 500)&(data[:, 10] > 100)), ,delete)
のような感じで書けないかなと思いましたが上手くいきません。
そして,調べるとpandasは出てきますがそちらはデータフレームなので今回の場合に適応できないのかなと思っております。

よろしくお願いいたします。

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

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

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

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

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

meg_

2020/12/20 14:15

質問のタイトルには「2次元配列」とありますが、質問の文章(data = [[1,2,3,4],[2, 2.1, 3.1, 4.1], [3, 2.2, 3.9, 5.7]...[10, 2.9, 3.9, 4.9]])を見るとリストのリストです。実際のデータの型は何でしょうか?
Lily1007

2020/12/20 14:20 編集

リストのリストが2次元配列ではないのでしょうか? またdata内の値の型はfloatを想定しております。
Lily1007

2020/12/20 14:21 編集

すみません、[[1,2,3,4][2, 2.1, 3.1, 4.1] [3, 2.2, 3.9, 5.7]...[10, 2.9, 3.9, 4.9]] の間違いでした。(各行の表記間のコンマなし)
guest

回答2

0

そして,調べるとpandasは出てきますがそちらはデータフレームなので今回の場合に適応できないのかなと思っております。

何故そう思われたのかは分かりませんが、下記の様な処理ならPandasで可能です。

python

1import pandas as pd 2import numpy as np 3 4df = pd.DataFrame((np.random.randn(120)*10).reshape(30, 4), columns=['id', 'mass', 'temparature', 'density']) 5print(df.head()) 6# id mass temparature density 7#0 -3.548244 -0.497186 21.893530 -3.547576 8#1 1.167749 14.301605 0.566189 -5.787389 9#2 -15.907664 11.322957 5.183636 -6.337448 10#3 19.463805 -17.338549 -8.904011 -13.990634 11#4 -21.574818 -9.332240 -7.525486 -14.383042 12 13result = df[(df['mass'] > 3.4) & (df['density'] > 5.0)] 14print(result) 15# id mass temparature density 16#5 1.686821 9.970387 -3.976955 18.458043 17#8 8.704518 8.367704 12.832061 12.756502 18#18 7.910845 17.156489 -7.584692 15.766605 19#26 0.097142 12.139886 1.813425 19.013383 20#29 -0.556932 9.897616 28.229758 9.81145

投稿2020/12/20 15:20

meg_

総合スコア10736

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

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

0

ベストアンサー

このとき(mass>3.4 & density>5.0)を満たす行だけを抽出したいです。

data1 = data(where((data[:, 9]< 500)&(data[:, 10] > 100)), ,delete)

なぜ、3.4、5.0 が 500 や 100 になるのか分かりませんが、

(mass>3.4 & density>5.0)を満たす行だけを抽出したいのなら、
次のコードでよいのではありませんか?

Python

1data = [ 2 [ 1, 2, 3, 4 ], 3 [ 2, 2.1, 3.1, 4.1], 4 [ 3, 2.2, 3.9, 5.7], 5 [ 5, 3.5, 2.0, 5.3], 6 [10, 2.9, 3.9, 4.9], 7 [15, 4.8, 5.0, 7.3], 8]; 9 10data1 = [e for e in data if e[1]>3.4 and e[3]>5.0] 11print(data1)

投稿2020/12/20 14:22

kazuma-s

総合スコア8224

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

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

Lily1007

2020/12/20 14:27

ありがとうございます! > data1 = data(where((data[:, 9]< 500)&(data[:, 10] > 100)), ,delete)についてですが,500や100は例では元々応用しようとしていたdataの値をそのまま書いてしまいました。すみません。
Lily1007

2020/12/20 14:29

data = [ [ 1, 2, 3, 4 ] [ 2, 2.1, 3.1, 4.1] [ 3, 2.2, 3.9, 5.7] [ 5, 3.5, 2.0, 5.3] [10, 2.9, 3.9, 4.9] [15, 4.8, 5.0, 7.3] ] data1 = [e for e in data if e[1]>3.4 and e[3]>5.0] print(data1)とリストのコンマを消すとTypeError: list indices must be integers or slices, not tupleとなりますが,コンマありではないと駄目なのでしょうか。
ppaul

2020/12/20 15:01

kazuma-sさんの書いたdataは、meg_さんが書かれているとおりリストのリストです。 pythonには二次元配列という概念はないのですが、多くの人が自分勝手に解釈して二次元配列と呼びます。 以下を実行してみれば、二次元配列ではないことがわかります。 コンマを消すと、エラーになる原因も少し分かるかもしれません。 data = [ [ 1, 2, 3, 4 ], [ 2, 2.1, 3.1, 4.1], [ 3, 2.2, 3.9, 5.7], [ 5, 3.5, 2.0, 5.3], [10, 2.9, 3.9, 4.9], [15, 4.8, 5.0, 7.3], ]; data[0] = 'abc' print(data)
Lily1007

2020/12/21 01:38

listのnumpyのarrayを混同しておりました。 そもそもlistとarrayの概念の違いが分かっておらず、混乱させるような質問をしてしまい、申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問