pandasでデータフレームの列スライスを取得する方法 質問する

pandasでデータフレームの列スライスを取得する方法 質問する

CSV ファイルから機械学習データを読み込みます。最初の 2 列は観測値で、残りの列は特徴です。

現在、私は次のことを行っています。

data = pandas.read_csv('mydata.csv')

次のような結果になります:

data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))

このデータフレームを 2 つのデータフレームにスライスします。1 つは列 と を含みabもう 1 つは列cd、 を含みます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、、、、、、、。barquzantcatsatdat

# selects all rows and all columns beginning at 'foo' up to and including 'sat'
df.loc[:, 'foo':'sat']
# foo bar quz ant cat sat

.locPythonのリストと同じスライス表記を行と列の両方で受け入れます。スライス表記は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つの行がある場合、wxyz

# slice from 'w' to 'y' and 'foo' to 'ant' by 3
df.loc['w':'y', 'foo':'ant':3]
#    foo ant
# w
# x
# y

おすすめ記事