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

Yar*_*riv 126 python series dataframe pandas

我试过了:

x=pandas.DataFrame(...)
s = x.take([0], axis=1)
Run Code Online (Sandbox Code Playgroud)

s获得一个DataFrame,而不是一个系列.

her*_*rfz 130

>>> 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'>
>>>
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

如果您在2017年6月之后阅读此内容,ix已在pandas 0.20.2中弃用,请不要使用它.使用lociloc代替.请参阅此问题的评论和其他答案.

  • `df.set_index( 'X').y` (4认同)
  • 值得添加.iloc替代方案(由Jeff在本页后面进一步提出),因为在存在名称数字的列时并不含糊. (4认同)
  • 答案是在2013年给出的; 据我所知,`.iloc`当时还不存在.在2016年,正确答案是杰夫(毕竟他是'熊猫'上帝,请注意你;-)).由于API的变化,我不确定有关更新答案的SO政策是什么; 老实说,我对这个答案的投票数感到惊讶,并不认为这对人们有用...... (4认同)
  • 不应再使用`ix`,而是使用`iloc`:`s = df.ix [:,0]`.有关`iloc`和`ix`的比较,请参阅[this post](/sf/answers/2211559871/). (4认同)
  • 另一个注释:在版本0.20中,`ix`被[弃用](http://pandas.pydata.org/pandas-docs/version/0.20/whatsnew.html#whatsnew-0200-api-breaking-deprecate-ix). (2认同)

HYR*_*YRY 105

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

x[x.columns[0]]
Run Code Online (Sandbox Code Playgroud)

  • 如果您有多个具有相同名称的列,则这不是很好.列名是否应该是唯一的是一个单独的讨论. (4认同)
  • x [x.columns [-1]] (3认同)

Jef*_*eff 85

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

In [7]: df.iloc[:,0]
Out[7]: 
0    1
1    2
2    3
3    4
Name: x, dtype: int64
Run Code Online (Sandbox Code Playgroud)

  • 这是与新版本以及旧版本最兼容的版本。这可能是自开发团队正式推广此方法以来最有效的方法。 (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
Run Code Online (Sandbox Code Playgroud)

  • 在这种特殊情况下,您知道第一列的名称("x"),但问题的含义是:"如何访问第一列,无论其名称是什么".此外,访问这样的列(`df.x`)不是通用的 - 如果列名包含空格怎么办?如果列的名称与`DataFrame` -s属性名称一致怎么办?使用`__getitem__`访问列更为通用(例如:`df ["x"]`). (7认同)
  • 如果列的标题中包含空格,也将不起作用。 (2认同)