如何将 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 中已被弃用,所以不要使用它。请改用loc
或iloc
。请参阅 cmets 和此问题的其他答案。
【讨论】:
df.set_index('x').y
值得添加 .iloc 替代方案(正如 Jeff 在本页进一步提出的那样),因为它在存在带有名称数字的列时不会模棱两可。
2013年给出了答案;据我记得,当时还没有.iloc
。 2016 年,正确答案是 Jeff 的(毕竟他是 pandas
上帝,请注意 ;-))。由于 API 更改,我不确定 SO 关于更新答案的政策是什么;老实说,我对这个答案的投票数感到惊讶,认为它对人们没有那么有用......
另一个说明:ix
在 0.20 版本中是 deprecated。
ix
不应再使用,请改用iloc
:s = df.ix[:,0]
。有关iloc
和ix
的比较,请参阅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]]
【讨论】:
我怎样才能得到这样的最后一列? 其他的也可以,但是这个看起来更直观。 如果您有多个具有相同名称的列,这不好。列名是否应该是唯一的是一个单独的讨论。 @Pollyx[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?