series
性质:一维数组对象,类似NumPy 的一维array。
(除了包含一组数据还包含一组索引,所以可以把它理解为一组带索引的数组。)
from pandas import Series
obj = Series([1,2,3,4], index = ['a', 'b', 'c', 'd'])
obj
输出
a 1
b 2
c 3
d 4
dtype: int64
obj.index
输出
Index(['a', 'b', 'c', 'd'], dtype='object')
obj.values
array([1, 2, 3
输出, 4], dtype=int64)
obj*2
输出
a 2
b 4
c 6
d 8
dtype: int64
obj+1
输出
a 2
b 3
c 4
d 5
dtype: int64
obj[obj>10]
输出
Series([], dtype: int64)
reindex
reindex方法重新设定了一组数据的索引,如果索引在原数据中没有匹配,则以NaN填充。
import pandas as pd
from pandas import Series, DataFrame
obj = Series([4.5, 7.2, -5.3, 3.6], index = ['d', 'b', 'a', 'c'])
#reindex用法示例
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj2
输出:a -5.3
b 7.2
c 3.6
d 4.5
e NaN
dtype: float64
如果不想以NaN填充呢?可以用fill_value方法来设置。
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value = 0)
输出:a -5.3
b 7.2
c 3.6
d 4.5
e 0.0
dtype: float64
也可以用ffill方法实现前向填充,也就是补充的索引如果没有对应的数值,则取前一个索引的值填充;或者用bfill方法实现后向填充,也就是补充的索引如果没有对应的数值,则取后一个索引的值填充
obj3 = Series(['blue', 'purple', 'yellow'], index = [0, 2, 4])
obj3
输出:0 blue
2 purple
4 yellow
dtype: object
#使用ffill实现前向值填充
obj3.reindex(range(6), method = 'ffill')
输出:0 blue
1 blue
2 purple
3 purple
4 yellow
5 yellow
dtype: object
#使用bfill实现前向值填充
obj3.reindex(range(5), method = 'bfill')
输出:0 blue
1 purple
2 purple
3 yellow
4 yellow
dtype: object
Series排序
series=pd.Series([3,4,1,6],index=['b','a','d','c'])
series
输出
b 3
a 4
d 1
c 6
dtype: int64
# 'series通过索引进行排序:'
series.sort_index()
输出
a 4
b 3
c 6
d 1
dtype: int64
#'series通过值进行排序:'
series.sort_values()
输出
d 1
b 3
a 4
c 6
dtype: int64
统计和计算
obj = Series([1,2,3,4,1,2,5],index=list('abcdefg'))
obj
输出
a 1
b 2
c 3
d 4
e 1
f 2
g 5
dtype: int64
obj.unique()
输出
array([1, 2, 3, 4, 5], dtype=int64)
set(obj)
输出
{1, 2, 3, 4, 5}
obj.value_counts()
输出
2 2
1 2
5 1
4 1
3 1
dtype: int64
from collections import Counter
Counter(obj)
输出
Counter({1: 2, 2: 2, 3: 1, 4: 1, 5: 1})
参考:
Python之DataFrame常用方法小结
Python学习笔记(6):Pandas的reindex方法
Python中的lambda和apply用法
python学习笔记—DataFrame和Series的排序