Series
You can create a Series with the constructor Series(data, index, dtype)
datacan be any object: anp.ndarray,list,dict, etc.indexvalues must have the same length as data (defaults tonp.arange(data))dtyperepresents the data type. This is inferred from data if not specified.
So all you need to do is to provide Series with your data and some axis/row labels (index).
Interestingly, you can have duplicate index labels. But this is best avoided. Python will eventually complain anyway when it attempts an operation that does not support duplicate index values. Apparently this is allowed purely for performance reasons.
s1 = pd.Series(np.array(["a", "b", "c", "d"]))
print(s1)
## 0 a
## 1 b
## 2 c
## 3 d
## dtype: object
s2 = pd.Series(np.array(["a", "b", "c", "d"]), index=[10, 11, 12, 13])
print(s2)
## 10 a
## 11 b
## 12 c
## 13 d
## dtype: object
You can also create your Series from a dictionary.
If you do not provide an index, then the dictionary keys will be use as axis labels.
If you provide an index, then pandas will attempt to match the indices to the keys of your dictionary and use the corresponding values as the data.
data = {"a" : 0., "b" : 1., "c" : 2.}
s1 = pd.Series(data)
print(s1)
## a 0.0
## b 1.0
## c 2.0
## dtype: float64
s2 = pd.Series(data, index=["b", "c", "d", "a"])
print(s2)
## b 1.0
## c 2.0
## d NaN
## a 0.0
## dtype: float64
Accessing elements in a Series
Accessing elements in a Series is straighforward.
You can access elements by their row index like in a NumPy array. Slicing also works.
s = pd.Series(np.array(["a", "b", "c", "d", "e"]))
print(s)
## 0 a
## 1 b
## 2 c
## 3 d
## 4 e
## dtype: object
print (s[0])
## a
print (s[:3])
## 0 a
## 1 b
## 2 c
## dtype: object
You can also access elements by their index labels.
s = pd.Series([1, 2, 3, 4, 5], index = ["a", "b", "c", "d", "e"])
print(s)
## a 1
## b 2
## c 3
## d 4
## e 5
## dtype: int64
print(s["a"])
## 1
print(s[["a", "d", "c"]])
## a 1
## d 4
## c 3
## dtype: int64