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

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

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

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

Q&A

解決済

2回答

283閲覧

パイソンにおける配列の列分割

zazenjp

総合スコア7

Python

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

0グッド

1クリップ

投稿2018/01/17 07:24

###前提・実現したいこと
人口知能による解析をchainerを用いて試みています。ファイル('T','log(A/T)',の2列のデータとラベル('Work')計3列のデータが854行含まれている)。まずファイルを読み込んでデータとラベルに分割し、その後学習用データとテストデータに分割しようと思っているのですが、まず最初に読み込んだ配列(data_f)をデータとラベルに分割できません。ソースコードをnotebookに打ち込み、実行するとエラーはないです。次にlabel=data_f[:2]と入れて実行するとエラーはないですが、ファイルにある1行目と2行目のみlabelに代入されます。ファイルにある854行全てについて0,1列にあるデータと、2列にあるラベルを全ての行について分離するにはどうすればよろしいでしょうか。また、分離した後、trainとtestに分割したいのですが、そのコードも教えて頂けますと幸いです。
###発生している問題・エラーメッセージ
うまく列を分離できない。

エラーメッセージ

なし
###該当のソースコード

python

1import numpy as np 2import pandas as pd 3import chainer 4from chainer import cuda, Function, gradient_check, report, training, utils, Variable 5from chainer import datasets, iterators, optimizers, serializers 6from chainer import Link, Chain, ChainList 7import chainer.functions as F 8import chainer.links as L 9from chainer.training import extensions 10# csvファイルの読み込み 11data_f = pd.read_csv('svmdattotal.csv', header=0) 12# 関係ありそうなT,lohg(A/T),Workのみを使う 13data_f = data_f[["T", "log(A/T)", "Work"]]

###試したこと
課題に対してアプローチしたことを記載してください
label=data_f[:2]としました。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
python 3.5.3[Anaconda 4.4.0 (64bit)です。

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

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

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

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

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

can110

2018/01/17 07:45

正しく読込&3列抽出できているか確認するため「print(data_f)」「print(data_f.info())」を実行した結果を追記ください。
zazenjp

2018/01/18 01:05 編集

回答遅れ申し訳ありません。print(data_f)の結果は T log(A/T) Work 0 0.390278 3.979983 1 1 0.383889 4.046218 1 2 0.010000 5.267795 0 3 0.008056 5.087501 0 4 0.541667 4.023916 1 5 0.007500 5.549139 0 6 0.009167 5.486451 0 7 0.350000 3.860053 1 8 0.010556 5.219617 0 9 1.127778 3.224544 1 10 0.329444 3.780369 1 11 0.011944 5.495904 0 12 0.617778 3.732815 1 13 0.023056 4.882823 0 14 0.000556 6.724604 0 15 0.001389 6.129289 0 16 0.002778 5.793970 0 17 0.002778 5.779209 0 18 0.162222 4.067566 1 19 0.256111 3.796637 1 20 0.009722 4.935774 0 21 0.004444 5.614368 0 22 0.002778 5.602253 0 23 0.162778 3.835163 1 24 0.008889 4.990652 0 25 0.016944 5.096955 0 26 0.269444 3.801137 1 27 0.263611 3.994896 1 28 0.006111 5.629739 0 29 0.005556 5.547617 0 .. ... ... ... 824 0.456667 3.811611 1 825 0.529167 3.916078 1 826 0.568889 3.677890 1 827 0.578889 3.676807 1 828 0.594722 3.739211 1 829 0.615833 3.722005 1 830 0.619444 3.800971 1 831 0.662778 3.678503 1 832 0.826111 3.696323 1 833 1.000833 3.722267 1 834 0.000556 6.941938 0 835 0.001667 6.086186 0 836 0.001667 5.850122 0 837 0.003611 5.480616 0 838 0.005000 5.988385 0 839 0.021389 5.102729 0 840 0.026111 5.159309 0 841 0.106389 4.468583 0 842 0.126111 3.774630 1 843 0.156944 3.797850 1 844 0.165278 3.697753 1 845 0.169444 3.700691 1 846 0.171111 3.695547 1 847 0.189167 3.683908 1 848 0.210278 3.739462 1 849 0.215278 3.791311 1 850 0.216667 3.795328 1 851 0.229722 3.884094 1 852 0.268333 3.635184 1 853 0.521389 3.800835 1 [854 rows x 3 columns]で print(data_f.info())の結果は <class 'pandas.core.frame.DataFrame'> RangeIndex: 854 entries, 0 to 853 Data columns (total 3 columns): T 854 non-null float64 log(A/T) 854 non-null float64 Work 854 non-null int64 dtypes: float64(2), int64(1) memory usage: 20.1 KB None です。
can110

2018/01/18 01:23

追記ありがとうございます。3列抽出できていますね。なお、この欄はマークダウン記法が使えないため、回答本文に追記(修正)いただくと見やすくなります。
guest

回答2

0

ベストアンサー

ちょっと問題読み違えているかもしれませんが、data_f[:2]だと行方向の抽出になります。
列の抽出はまさしくdata_f = data_f[["T", "log(A/T)", "Work"]]でできています。
よってラベルとデータ列の抽出コードは以下のようになります。

Python

1import pandas as pd 2# サンプルデータ 3df = pd.DataFrame({'T' : [0.1, 0.2, 0.3], 'log(A/T)' : [1.1, 2.1, 3.1], 'Work' : [0,1,2]}) 4df = df[['T','log(A/T)','Work']] 5 6# ラベル 7label = df[['Work']] 8print(label) 9""" 10 Work 110 0 121 1 132 2 14""" 15 16# データ 17data = df[['T','log(A/T)']] 18print(data) 19""" 20 T log(A/T) 210 0.1 1.1 221 0.2 2.1 232 0.3 3.1 24"""

なおchainer使ったことないため、データの分割については私には回答できません。

投稿2018/01/18 01:19

can110

総合スコア38233

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

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

zazenjp

2018/01/18 01:29

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

0

a[:, :2]でどうでしょう。

投稿2018/01/17 12:32

mkgrei

総合スコア8560

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

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

zazenjp

2018/01/18 00:54

回答遅れ、申し訳ありません。label=data_f[:, :2] labelとすると --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-6-bff1b1779a79> in <module>() ----> 1 label=data_f[:, :2] 2 label ~\Anaconda3\envs\chainenv\lib\site-packages\pandas\core\frame.py in __getitem__(self, key) 2137 return self._getitem_multilevel(key) 2138 else: -> 2139 return self._getitem_column(key) 2140 2141 def _getitem_column(self, key): ~\Anaconda3\envs\chainenv\lib\site-packages\pandas\core\frame.py in _getitem_column(self, key) 2144 # get column 2145 if self.columns.is_unique: -> 2146 return self._get_item_cache(key) 2147 2148 # duplicate columns & possible reduce dimensionality ~\Anaconda3\envs\chainenv\lib\site-packages\pandas\core\generic.py in _get_item_cache(self, item) 1838 """Return the cached item, item represents a label indexer.""" 1839 cache = self._item_cache -> 1840 res = cache.get(item) 1841 if res is None: 1842 values = self._data.get(item) TypeError: unhashable type: 'slice' というエラーがでます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問