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

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

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

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

Q&A

解決済

1回答

2248閲覧

ndarrayの二次元配列から必要な要素だけ取り出したい <Python>

moto_i

総合スコア20

Python

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

0グッド

0クリップ

投稿2019/03/17 14:23

二次元配列から必要な要素だけ取り出したい <Python>

"Python"

import pandas as pd
data_list = pd.read_csv('data_list.csv')
|A|B|C|D
|:--|:--:|--:|
|100|1000|50.0|1000
|200|2500|40.0|1000
|300|400|20.0|1000

上のような形のデータが入ったCSVファイル(data_list.csv)をDataFrame 形式で読み取りました。
すると下記のような取り込み方がされました。
これをDataFrame形式からndarray形式に変換したあと、
各配列の必要な要素だけを抽出したいです。
今回はC列の要素の数字を取り出したいです。

ご回答よろしくお願いいたします。

|0|A|B|C|D
|:--|:--|:--|:--
|1|100|1000|50.0|1000
|2|200|2500|40.0|1000
|3|300|400|20.0|1000

Python

1import pandas as pd 2data_list = pd.read_csv('data_list.csv') 3 4data_list.head() 5 6nd_data_list = data_list.values #DataFrameからnd.arrayに変換 7 8y = nd_data_list 9print(type(y))< 10print(y)

出力結果は下記のようになっています。
<class 'numpy.ndarray'>
[[ 100 1000 50 1000]
[ 200 2500 40 1000]
[ 300 400 20 1000]]

この2次元配列の3番目の要素(50, 40, 20)だけを抽出するプログラムを知りたいです。

<実現したい動作結果>
y = [[50][40][20]]

※のちに一次元配列にするy.flatten()を使って一次元配列にしたいと思います。
そのための前処理をしたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

3列目を numpy 配列で得るというのが最終目標である場合は pandas を経由しないで、numpy.loadtxt() で読み込めばよいと思います。

numpy.loadtxt — NumPy v1.16 Manual

python

1import numpy as np 2 3data = np.loadtxt('data_list.csv', delimiter=',', skiprows=1, usecols=2) 4print(data) # [50. 40. 20.]
  • delimiter=',': カンマ区切り
  • skiprows=1; ヘッダーの1行目スキップ
  • usecol=2: 2列目だけ読み込み。

返り値はすでに1次元配列になっています。

投稿2019/03/17 14:30

編集2019/03/17 14:30
tiitoi

総合スコア21956

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

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

moto_i

2019/03/17 14:33

早速の回答、ありがとうございました。
moto_i

2019/03/17 14:39

ちなみにですが、numpy.loadtxt()をつかわずに [[ 100 1000 50 1000] [ 200 2500 40 1000] [ 300 400 20 1000]] から y = [[50][40][30]]に変換することは可能でしょうか?
tiitoi

2019/03/17 14:41

df = pd.read_csv('test.txt') vals = df['C'].values 質問の例では上でできます。
moto_i

2019/03/17 14:42

ありがとうございます。疑問解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問