如何将pandas DataFrame的第一列作为系列?


142

我试过了:

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

s获取一个DataFrame,而不是一个Series。

Answers:


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月之后阅读ix此书,则熊猫0.20.2已弃用该书,因此请不要使用它。使用lociloc代替。查看对此问题的评论和其他答案。


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

4
值得添加.iloc替代方案(如Jeff在本页下方进一步提出的那样),因为在存在带有数字名称的列的情况下,它不是模棱两可的。
sapo_cosmico '16

4
答案是在2013年给出的;据我所记得,.iloc那时还没有。在2016年,正确的答案是杰夫的(毕竟他是pandas上帝,请注意;-)。由于API的更改,我不确定关于更新答案的SO的政策是什么;老实说,我很惊讶这个答案的票数,认为这对人们没有用...
herrfz 2016年

2
另一个注意事项:在0.20版ix已弃用
ayhan

5
ix不应再使用,iloc而改为:s = df.ix[:,0]。有关和的比较,请参见这篇文章ilocix
normanius

115

您可以通过以下代码将第一列作为系列:

x[x.columns[0]]

我怎样才能得到像这样的最后一栏?
波莉

其他的也可以正常工作,但是这个看起来更直观。
elPastor

6
如果您有多个具有相同名称的列,那就不好了。列名是否应该唯一是一个单独的讨论。
维沙尔

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

115

从v0.11 +开始,...使用df.iloc

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

3
这是与新版本以及旧版本最兼容的版本。这可能是自开发团队正式推广此方法以来最有效的方法。
华丽的

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.