一、基本数据结构
1、Series:带标签(行索引)的一维同构数组
长度不可改变
2、DataFrame:既有行索引、又有列索引的二维异构数组
大小可变
二、Series的创建及其属性
1、创建Series数组
import pandas as pd
import numpy as np
'''
pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
参数说明:
data:数组
index:行索引
dtype:指定数组的数据类型
name:Series对象的名称属性
copy:默认为False,返回一个视图,如果Series对象元素发生变化,影响原数组data
设置为True,则为深拷贝,Series对象元素发生变化不影响原数组data
函数作用:
创建Series数组对象
'''
data = np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 创建Series
p1 = pd.Series(data,index = ["No{}".format(i) for i in range(1,11)],name="Num")
p1
# No1 0
# No2 1
# No3 2
# No4 3
# No5 4
# No6 5
# No7 6
# No8 7
# No9 8
# No10 9
# Name: Num, dtype: int32
# 修改Series数组元素
p1[0] = 11
# 原数组数据发生变
data
# array([11, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 指定copy = True,则对Series数组进行修改不影响原数组data
p2 = pd.Series(data,index = ["No{}".format(i) for i in range(1,11)],name="Num1",copy = True)
通过字典创建Series数组
# 通过字典创建Series
p2 = pd.Series({"name":"Tom","class": '01',"age":18})
p2
# name Tom
# class 01
# age 18
# dtype: object
2、Series数组的属性
- index:索引(标签)
- values:数组数据
- name:数组对象的名称
- shape:数组形状
- dtypes:数组数据类型
- ndim:数组的维度
index()
# 索引,一维数组形式存在
type(p1.index) # pandas.core.indexes.base.Index
p1.index
out:
Index(['No1', 'No2', 'No3', 'No4', 'No5', 'No6', 'No7', 'No8', 'No9', 'No10'], dtype='object')
values()
p1.values
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
name()
p1.name
# 'Num'
shape()
p1.shape
# (10,)
dtypes()
p1.dtypes
# dtype('int32')
ndim()
p1.ndim
# 1
三、DataFrame的创建及其属性
1、创建DataFrame数组
'''
d.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
参数说明:
data:数组
index:行索引
columns:列索引
dtype:指定数组的数据类型
copy:默认为False,返回一个视图,如果DataFrame对象元素发生变化,影响原数组data
设置为True,则为深拷贝,DataFrame对象元素发生变化不影响原数组data
函数作用:
创建DataFrame数组对象
'''
# 通过list创建DataFrames对象
d1 = pd.DataFrame(np.arange(10).reshape(2,5))
d1
不指定行索引和列索引,默认是从0开始的数字索引
指定行索引、列索引:
index_label = ["Line{}".format(i) for i in range(1,3)]
column_label = ["Column{}".format(i) for i in range(1,6)]
# 通过list创建DataFrame对象,指定行索引和列索引
d1 = pd.DataFrame(np.arange(10).reshape(2,5),index = index_label, columns = column_label)
d1
out:
通过字典创建DataFrame对象
# 同d2 = pd.DataFrame([{"name":"Lily", "age":"18"},{"name":"Tom", "age":"20"},{"name":"Ada", "age":"30"}])
d2 = pd.DataFrame({'name':['Lily','Tom','Ada'],'age':[18,20,30]})
d2
out:
字典中的key就是列索引
2、DataFrame常用属性
- pd.shape:形状
- pd.index:行索引
- pd.columns:列索引
- pd.valus:数组值
- pd.dtypes:数组数据类型
- pd.ndim:数组的维度
- T:转置
准备数据:
# 创建符合正态分布的10只股票5天的涨跌幅数据
stock_change = np.random.normal(0,1,(10,5))
# 格式化行索引
index_label = ["第{}只股票".format(i) for i in range(1,11)]
# 格式化列索引
column_label = ["第{}天".format(i) for i in range(1,6)]
# 创建DataFrame对象时指定行列索引
stock = pd.DataFrame(stock_change,index = index_label,columns = column_label)
stock
数据如下:
pd.shape
stock.shape
# (10, 5)
pd.index
stock.index
# Index(['第1只股票', '第2只股票', '第3只股票', '第4只股票', '第5只股票', '第6只股票', '第7只股票', '第8只股票',
# '第9只股票', '第10只股票'],
# dtype='object'
pd.columns
stock.columns
# Index(['第1天', '第2天', '第3天', '第4天', '第5天'], dtype='object')
pd.values
stock.values
# array([[ 0.04466589, 0.91545238, -0.23571362, -0.59849205, -1.84168231],
# [ 0.96926706, 0.92734874, -2.00029467, 0.23596919, 0.08193627],
# [-0.25711234, -0.24436507, 0.8807354 , -0.33498317, -0.52083976],
# [ 0.07971122, -0.12289288, 0.82501248, -0.21310936, 1.16219933],
# [ 1.02158754, 0.40847468, -0.42161008, 1.64059891, -1.25303294],
# [-0.88134845, 0.30092855, 0.24451512, 1.02673738, -0.39671031],
# [-0.04686787, -2.14212975, 0.5577116 , 0.59497006, 0.92413479],
# [ 0.18500676, -0.05566599, 0.59640247, 0.48294299, -0.51581298],
# [ 0.52520155, 0.7675729 , -0.89949606, -1.57985854, -0.30597079],
# [-1.46217115, -1.26883254, 2.17042292, 0.72868 , 0.94855897]])
pd.T
# 转置 ,同stock.transpose()
stock.T
out: