本文最后更新于:2023年4月15日 晚上
python数据科学(六) Pandas(一)
Pandas是在NumPy的基础上建立的新程序库, 提供了一种高效的DataFrame数据结构, DataFrame本质上是一种带行标签和列标签, 支持相同类型数据和缺失值的多维数组
1 | Pandas的Series对象
Pandas的Series对象是一个带索引数据构成的一维数组, 可以一个数组创建Series对象

values和index:

和NumPy数组一样, 数据可以通过Python的中括号索引标签获取
Series和NumPy数组的本质差异其实是索引
NumPy数组通过隐式定义的整数索引获取数值, 而Pandas的Series对象用一种显式定义的索引与数值关联
显式索引的定义让Series可以让索引为任意想要的类型
如用字符串定义索引:
1 2 3
| data = pd.Series([1, 2, 3], index = ['a', 'b', 'c']) data['a']
|
特殊的字典
Series对象可以被看成一种特殊的python字典, 可以直接用python字典创建一个Series对象
1 2 3 4 5 6 7 8 9 10
| population_dict = {'a': 1, 'b': 2, 'c': 3} population = pd.Series(population_dict) """ a 1 b 2 c 3 dtype: int64 """
|
典型的获取字典值方式仍然有效:
Series对象和字典不同的是, 还支持数组形式的操作, 如切片:
1 2 3 4 5 6
| population['a': 'b'] """ a 1 b 2 dtype: int64 """
|
Series对象的创建方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| pd.Series([1, 2, 3])
pd.Series(5, index = [100, 200, 300]) """ 100 5 200 5 300 5 dtype: int64 """
pd.Series({2: 'a', 1: 'b', 3: 'c'}) """ 2 a 1 b 3 c dtype: object """
pd.Series({2: 'a', 1: 'b', 3: 'c'}, index = [3, 2]) """ 3 c 2 a dtype: object """
|
2 | Pandas的DataFrame对象
Series: 一维
DataFrame: 二维
可以将DataFrame看作有序排列的若干Series对象
Series中一个键映射一个值, DataFrame中一个键映射一个Series

创建DataFrame对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| population = pd.Series(dict_population) pd.DataFrame(population, columns = ['population']) """ population 湖南 1000 广东 2000 上海 10000 """
pd.DataFrame([{'a': 1, 'b': 2}, {'a': 2, 'c': 3}]) """ a b c 0 1 2.0 NaN 1 2 NaN 3.0 """
dict_population = {"湖南": 1000, "广东": 2000, "上海": 10000} dict_area = {"湖南": "1A", "广东": "2B", "上海": "3C"} population = pd.Series(dict_population) area = pd.Series(dict_area) state = pd.DataFrame({'population': population, 'area': area}) """ population area 湖南 1000 1A 广东 2000 2B 上海 10000 3C """
pd.DataFrame(np.random.rand(3, 2)) """ 0 1 0 0.931631 0.727243 1 0.796623 0.715634 2 0.730584 0.020360 """ pd.DataFrame(np.random.rand(2, 3), columns = ['A', 'B', 'C'], index = ['aaa', 'bbb']) """ A B C aaa 0.608391 0.362048 0.865072 bbb 0.768997 0.457158 0.885170 """
a = np.zeros(3, dtype=[('a', 'i8'), ('b', 'f8')]) a pd.DataFrame(a) """ a b 0 0 0.0 1 0 0.0 2 0 0.0 """
|
3 | Pandas的Index对象
可以将Pandas的Index对象看作是一个不可变数组或有序集合(实际上是一个多集, 因为index对象可能会包含重复值)
1 2 3 4 5
| ind = pd.Index(np.arange(1, 4)) ind """ Int64Index([1, 2, 3], dtype='int64') """
|
Index对象和numpy数组之间的差别是: Index对象的索引是不可变的, 也就是说不能通过通常的方式进行调整
将Index对象看成有序集合
Pandas对象涉及很多集合操作, Index对象遵循python标准库的集合数据结构的很多种习惯用法, 包括并, 交, 差等
