pandas DataFrameの最初の列をシリーズとして取得する方法は?


142

私は試した:

x=pandas.DataFrame(...)
s = x.take([0], axis=1)

またs、SeriesではなくDataFrameを取得します。

回答:


141
>>> import pandas as pd
>>> df = pd.DataFrame({'x' : [1, 2, 3, 4], 'y' : [4, 5, 6, 7]})
>>> df
   x  y
0  1  4
1  2  5
2  3  6
3  4  7
>>> s = df.ix[:,0]
>>> type(s)
<class 'pandas.core.series.Series'>
>>>

================================================== =========================

更新

2017年6月以降にこれを読んでいる場合は、ixpandas 0.20.2で非推奨になっているため、使用しないでください。locまたはiloc代わりに使用します。この質問に対するコメントやその他の回答を参照してください。


4
df.set_index('x').y
herrfz 2014年

4
.ilocの選択肢を追加する価値があります(このページの後半でJeffによって提案されています)。名前に番号が付いた列が存在する場合でも曖昧ではないためです。
sapo_cosmico

4
答えは2013年に与えられました。私が覚えている限りで.ilocは、当時はまだそこにいませんでした。2016年、正解はジェフ(pandas正直なところ、彼は神なので、あなたに気をつけてください;-))です。APIの変更による回答の更新に関するSOのポリシーはわかりません。この回答の投票数に正直に驚いていますが、それは人々にとって
それほど

2
別のノートでは:ixされた非推奨バージョン0.20で。
ayhan

5
ix今後は使用しないでilocくださいs = df.ix[:,0]。代わりにを使用してください。参照この記事の比較のためにilocix
ノルマニアス2017年

117

v0.11 +以降、...を使用しますdf.iloc

In [7]: df.iloc[:,0]
Out[7]: 
0    1
1    2
2    3
3    4
Name: x, dtype: int64

3
これは、新しいリリースと古いバージョンとの互換性が最も高いバージョンです。そして、開発チームが公式にこのアプローチを推進しているので、おそらく最も効率的です。
18

116

次のコードにより、最初の列をシリーズとして取得できます。

x[x.columns[0]]

そのような最後の列を取得するにはどうすればよいですか?
ポリー

他のものも問題なく動作しますが、これはより直感的に見えます。
elPastor 2016

6
同じ名前の列が複数ある場合、これは良くありません。列名が一意である必要があるかどうかは、個別の説明です。
Vishal 2017年

@Pollyx[x.columns[x.columns.size-1]]
fujianjin6471

13

これが最も簡単な方法ではありませんか?

列名別:

In [20]: df = pd.DataFrame({'x' : [1, 2, 3, 4], 'y' : [4, 5, 6, 7]})
In [21]: df
Out[21]:
    x   y
0   1   4
1   2   5
2   3   6
3   4   7

In [23]: df.x
Out[23]:
0    1
1    2
2    3
3    4
Name: x, dtype: int64

In [24]: type(df.x)
Out[24]:
pandas.core.series.Series

9
この特定のケースでは、最初の列の名前( "x")を知っていますが、質問の意味は、「最初の列にアクセスするにはどうすればよいですか、その名前に関係なく」です。また、この(df.x)のような列へのアクセスは一般的ではありません-列名にスペースが含まれている場合はどうなりますか?列の名前がDataFrame-s属性名と一致する場合はどうなりますか?を使用して列にアクセスする方が一般的です__getitem__(つまり、次のようになります:) df["x"]
ponadto 2017年

2
また、列のヘッダーにスペースなどが含まれている場合も機能しません。
ジャン=フランソワ・コルベット

3

これは、csvファイルからシリーズをロードする場合に最適です

x = pd.read_csv('x.csv', index_col=False, names=['x'],header=None).iloc[:,0]
print(type(x))
print(x.head(10))


<class 'pandas.core.series.Series'>
0    110.96
1    119.40
2    135.89
3    152.32
4    192.91
5    177.20
6    181.16
7    177.30
8    200.13
9    235.41
Name: x, dtype: float64

0
df[df.columns[i]]

ここiで、は列の位置/番号です(0から開始)。

つまり、i = 0最初の列です。

次のコマンドを使用して最後の列を取得することもできます i = -1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.