CSV ファイルから機械学習データを読み込みます。最初の 2 列は観測値で、残りの列は特徴です。
現在、私は次のことを行っています。
data = pandas.read_csv('mydata.csv')
次のような結果になります:
data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))
このデータフレームを 2 つのデータフレームにスライスします。1 つは列 と を含みa
、b
もう 1 つは列c
、d
、 を含みますe
。
次のように書くことはできません
observations = data[:'c']
features = data['c':]
最良の方法が何なのか分かりません。 が必要ですかpd.Panel
?
ところで、データフレームのインデックス付けはかなり矛盾していると思います。許可されているのdata['a']
に許可されてdata[0]
いない。一方、data['a':]
許可されていないのに許可されdata[0:]
ている。これには実際的な理由があるのでしょうか?列がIntでインデックス付けされている場合、これは本当に混乱を招きます。data[0] != data[0:1]
ベストアンサー1
2017 回答 - pandas 0.20: .ix は非推奨です。.loc を使用してください
を参照してくださいドキュメントの非推奨
.loc
行と列の両方を選択するためにラベル ベースのインデックスを使用します。ラベルはインデックスまたは列の値です。スライスには.loc
最後の要素が含まれます。
次の列を持つ DataFrame があるとします:
foo
、、、、、、、。bar
quz
ant
cat
sat
dat
# selects all rows and all columns beginning at 'foo' up to and including 'sat'
df.loc[:, 'foo':'sat']
# foo bar quz ant cat sat
.loc
Pythonのリストと同じスライス表記を行と列の両方で受け入れます。スライス表記はstart:stop:step
# slice from 'foo' to 'cat' by every 2nd column
df.loc[:, 'foo':'cat':2]
# foo quz cat
# slice from the beginning to 'bar'
df.loc[:, :'bar']
# foo bar
# slice from 'quz' to the end by 3
df.loc[:, 'quz'::3]
# quz sat
# attempt from 'sat' to 'bar'
df.loc[:, 'sat':'bar']
# no columns returned
# slice from 'sat' to 'bar'
df.loc[:, 'sat':'bar':-1]
sat cat ant quz bar
# slice notation is syntatic sugar for the slice function
# slice from 'quz' to the end by 2 with slice function
df.loc[:, slice('quz',None, 2)]
# quz cat dat
# select specific columns with a list
# select columns foo, bar and dat
df.loc[:, ['foo','bar','dat']]
# foo bar dat
行と列でスライスすることができます。たとえば、、、、v
というラベルの付いた5つの行がある場合、w
x
y
z
# slice from 'w' to 'y' and 'foo' to 'ant' by 3
df.loc['w':'y', 'foo':'ant':3]
# foo ant
# w
# x
# y