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

Posted

技术标签:

【中文标题】如何将 pandas DataFrame 的第一列作为一个系列?【英文标题】:How to get the first column of a pandas DataFrame as a Series? 【发布时间】:2013-02-27 22:45:25 【问题描述】:

我试过了:

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

s 得到一个 DataFrame,而不是一个系列。

【问题讨论】:

【参考方案1】:
>>> 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 在 pandas 0.20.2 中已被弃用,所以不要使用它。请改用lociloc。请参阅 cmets 和此问题的其他答案。

【讨论】:

df.set_index('x').y 值得添加 .iloc 替代方案(正如 Jeff 在本页进一步提出的那样),因为它在存在带有名称数字的列时不会模棱两可。 2013年给出了答案;据我记得,当时还没有.iloc。 2016 年,正确答案是 Jeff 的(毕竟他是 pandas上帝,请注意 ;-))。由于 API 更改,我不确定 SO 关于更新答案的政策是什么;老实说,我对这个答案的投票数感到惊讶,认为它对人们没有那么有用...... 另一个说明:ix 在 0.20 版本中是 deprecated。 ix 不应再使用,请改用ilocs = df.ix[:,0]。有关ilocix 的比较,请参阅this post。【参考方案2】:

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

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

【讨论】:

这是与新版本和旧版本最兼容的版本。自开发团队正式推广这种方法以来,这可能是最有效的。【参考方案3】:

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

x[x.columns[0]]

【讨论】:

我怎样才能得到这样的最后一列? 其他的也可以,但是这个看起来更直观。 如果您有多个具有相同名称的列,这不好。列名是否应该是唯一的是一个单独的讨论。 @Polly x[x.columns[x.columns.size-1]]【参考方案4】:

这不是最简单的方法吗?

按列名:

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

【讨论】:

在这种特殊情况下,您知道第一列的名称(“x”),但问题的意思是:“我如何访问第一列,无论其名称如何”。此外,访问这样的列 (df.x) 也不是通用的——如果列名包含空格怎么办?如果列名与DataFrame-s 属性名重合怎么办?使用__getitem__ 访问列更为通用(例如:df["x"])。 如果列的标题有例如里面有空格。【参考方案5】:

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

【讨论】:

【参考方案6】:
df[df.columns[i]]

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

所以,i = 0 是第一列。

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

【讨论】:

以上是关于如何将 pandas DataFrame 的第一列作为一个系列?的主要内容,如果未能解决你的问题,请参考以下文章

将 Pandas Dataframe 中的选择列转换为 Numpy 数组

python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?

Pandas Dataframe:如何将一列拆分为多个单热编码列[重复]

pandas.DataFrame.agg 不适用于 np.std?

Pandas:如何在第二个 DataFrame 的另一列中查找子字符串位置

Pandas:如何修改DataFrame中某一列的值?