如何将 pandas DataFrame 的第一列作为 Series 获取?

178

我尝试过:

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

并且s获得的是DataFrame,而不是Series。

6个回答

154
>>> 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已经被弃用,不再使用。请使用lociloc代替。参见关于本问题的评论和其他答案。


5
将DataFrame的索引设置为列"x",并返回列"y"。 - herrfz
5
可以考虑添加 .iloc 替代方案(就像 Jeff 在本页面下面提出的那样),因为它在存在数字列名时不会产生歧义。 - sapo_cosmico
6
答案是在2013年给出的;就我所记得的而言,当时还没有.iloc。到了2016年,正确的答案应该是Jeff的(毕竟他是pandas之神,你知道的; -))。我不确定SO关于由于API更改更新答案的政策是什么;我对这个答案获得的票数感到惊讶,没想到它对人们那么有用... - herrfz
2
另外需要注意的是:ix在0.20版本中已被弃用 - ayhan
9
ix 不应再被使用,应该使用 iloc 替代:s = df.ix[:,0]。参考这篇文章比较 ilocix - normanius
显示剩余2条评论

154
从v0.11+版本开始,使用df.iloc
In [7]: df.iloc[:,0]
Out[7]: 
0    1
1    2
2    3
3    4
Name: x, dtype: int64

3
这是与新版本和旧版本最兼容的版本。可能也是最高效的,因为开发团队正式推荐这种方法。 - gaborous

124

您可以通过以下代码将第一列作为Series获取:

x[x.columns[0]]

我该如何获取类似那样的最后一列? - Polly
其他的也都可以,但这个更直观。 - elPastor
7
如果您有多个同名列,则这样做就不好了。列名是否应该唯一是一个单独的讨论话题。 - Vishal
@Polly x[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

11
在这种情况下,你知道第一列的名字是“x”,但问题的意思是:“无论列名是什么,我该如何访问第一列”。此外,像df.x这样访问列并不是通用的。如果列名包含空格怎么办?如果列名与DataFrame的属性名相同怎么办?使用__getitem__更通用(即像这样:df["x"])来访问列。 - ponadto
3
如果列标题中有空格等字符,则此方法也无法正常工作。 - Jean-François Corbett

4

当你想从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

4
df[df.columns[i]]

其中i表示列的位置/编号(从0开始)。

因此,i = 0表示第一列。

你也可以使用i = -1来获取最后一列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接