- import numpy as np
- import pandas as pd
- # Series 类
- # 是一个一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成
- # 1. 通过列表创建Series对象
- # 由索引和数据组成的, 左边是索引, 右边是数据
- ser_obj = pd.Series(range(10, 20))
- print(ser_obj)
- # 获取索引 Range Index是索引的类型
- print(ser_obj.index) # RangeIndex(start=0, stop=10, step=1)
- # 获取值,
- print(ser_obj.values)
- # head()函数 默认查看前5条数据, 可以传入指定查看数据的个数
- print(ser_obj.head(6))
- # 根据索引取出数据
- print(ser_obj[5])
- # 基本运算, 作用范围只是数据
- print(ser_obj+2)
- # 筛选数据, 作用范围只是数据, 符合条件的为True, 不符合的为False
- print(ser_obj > 15)
- # 取出符合条件的数据, 将True与False用数据替代
- print(ser_obj[ser_obj > 15])
- # 2. 通过字典构造series对象. 字典中的key作为索引, 值作为值, 索引类型: Int64Index
- student = {
- 2001: 15.5,
- 2005: 20.4,
- 2008: 26.5
- }
- # 传入字典
- ser_obj = pd.Series(student)
- # 指定索引名称
- ser_obj.index.name = 'year'
- # 指定series对象名称
- ser_obj.name = 'GDP'
- print(ser_obj)
- print(ser_obj.index) # Int64Index([2001, 2005, 2008], dtype='int64', name='year')
- # 3. 手动指定索引和数据类型
- # 1. 数据 2. index=索引列表
- ser_obj = pd.Series(['张三', '李四', '王五'], index=['a', 'b', 'c'])
- print(ser_obj)
- ser_obj = pd.Series(['10', '20', '30'], index=['a', 'b', 'c'], dtype='float64')
- print(ser_obj)
- # DataFrame类
- # 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值的)
- # 类似多维数组/表格数据
- # 分为行索引和列索引
- # 创建二维数组
- # randn() 生成带有正负值的数据
- arr = np.random.randn(3, 4)
- print(arr)
- print(type(arr))
- # 1. 通过ndarrary创建dataframe对象
- # 二维数组中每一个小数组中的数据在dataframe中是一行
- # 二维数组中每一个小数组中对应索引的数据在dataframe中是一列
- # index 指定行索引 columns指定列索引
- df_obj = pd.DataFrame(arr, index=['a', 'b', 'c'], columns=['name', 'age', 'phone', 'sex'])
- print(df_obj)
- # 2. 通过字典创建DataFrame对象
- # 保证数据中至少有一个列数据是带有行索引的
- # key 作为列索引 value作为一列数据
- dict_data = {
- 'A': 1,
- 'B': pd.Series(range(4), index=list(range(4)), dtype='int32'),
- 'C': np.array(range(4, 8), dtype='int32'),
- 'D': 4,
- 'E': 'hello',
- 'F': 6
- }
- df_obj = pd.DataFrame(dict_data)
- print(df_obj)
- # 通过列索引(字典当中key)取出某一列的数据
- # 取出来的是带有数据和索引的series对象
- print(df_obj['C'])
- print(type(df_obj['C']))
- # 修改数据
- # 意思就是说先把索引为C的数据拿出来, 再用Series里面的数据替换
- df_obj['C'] = pd.Series('world', index=list(range(4)))
- print(df_obj)
- # 添加新列
- # 运算,只作用于数据, 不作用于索引
- df_obj['G'] = df_obj['B']*2
- print(df_obj)
- df_obj['H'] = '你好'
- print(df_obj)
- # 删除列
- del(df_obj['H'])
- print(df_obj)
- # 查看索引
- # Series和DataFrame对象的索引都是Index对象
- # 索引对象不可变, 为了保证数据的安全性
- # 索引的类型
- # Index Int64Index RangeIndex(默认) DateTimeIndex 时间戳索引
- ser_obj = pd.Series(range(5), index=list(range(10, 15)))
- print(ser_obj)
- print(type(ser_obj.index))
- print(type(df_obj.index))