I tried:
x=pandas.DataFrame(...)
s = x.take([0], axis=1)
And s gets a DataFrame, not a Series.
From v0.11+, ... use df.iloc.
In [7]: df.iloc[:,0]
Out[7]:
0 1
1 2
2 3
3 4
Name: x, dtype: int64
>>> 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'>
>>>
===========================================================================
UPDATE
If you're reading this after June 2017, ix has been deprecated in pandas 0.20.2, so don't use it. Use loc or iloc instead. See comments and other answers to this question.
df.set_index('x').y.iloc wasn't there yet back then. In 2016, the correct answer is Jeff's (after all he's pandas God, mind you ;-)). I'm not sure what's SO's policy regarding update of answers due to API change; I'm honestly surprised by the number of votes for this answer, didn't think it was that useful to people...ix was deprecated in version 0.20.You can get the first column as a Series by following code:
x[x.columns[0]]
x[x.columns[x.columns.size-1]]Isn't this the simplest way?
By column name:
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
df.x) is not generic -- what if the column name contains spaces? What if the name of the column coincides with DataFrame-s attribute name? It's more general to access columns using __getitem__ (i.e. like so: df["x"]).This works great when you want to load a series from a csv file
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