数据分析
这是一个数据分析的 class-follow 笔记。
导包
import pandas as pd
import numpy as np
两大结构
Series
Series
是带标签的一维数组,可以存储任何数据类型(整型,字符串,浮点数等等)。轴标签统称为索引,基本的 Series
创建方法如下:
s = pd.Series(data, index=index)
s = pd.Series(data=None, index=None, dtype=None, name=None, copy=None, fastpath=None) # 完整参数配置情况
data 支持:
- Python 字典
- 多维数组
- 标量值,如 5
index 是标签列表,标签可以重复(需要索引唯一的操作才会报错):
- 当 data 使用字典类型时,键就是一部分的标签,index 中多余的标签会有值
NaN
。 - 当 data 使用多维数组时,指定标签要与数据长度相同,默认使用 0~length-1。
- 当 data 使用标量值时,根据标签的多少创建常量,默认使用 0。
标签是与数据对齐的,计算时不会因为重复标签而发生错误。
Series
既能向多维数组一样进行索引、切片以及一些函数操作,又能像字典一样根据键取值。
import pandas as pd
import numpy as np
ps1 = pd.Series(np.random.randn(10), index=list("甲乙丙丁戊己庚辛壬癸"), name="正态分布随机数")
ps2 = pd.Series(
{i: np.random.randn() for i in "甲乙丙丁戊"},
index=list("甲乙丙丁戊己庚辛壬癸"),
name = "正态分布随机数",
)
ps3 = pd.Series(1., index=list("甲乙丙丁戊己庚辛壬癸"), name="常量")
# print(ps1, ps2, ps3, sep="\n\n")
print(ps1[0], ps1["甲"], ps1[0:3], ps1[ps1 > ps1.median()], sep='\n\n')
DataFrame
DataFrame
可以理解为多个 Series 组成的。
df = pd.DataFrame(data, index, cloumn)
df = pd.DataFrame(data=None, index=None, cloumn=None, dtype=None, copy=None)
data 支持:
- 数组型:多维数组、列表、结构多数组
- 字典型:列表字典、Series 字典、元组字典(自动创建多层索引)
- 一个 DataFrame
df1_1 = pd.DataFrame(
{
'name': pd.Series(["张三", "李四", "王五"], index=list("甲乙丙")),
'score': pd.Series([100, 70, 80], index=list("甲乙丙")),
'grade': pd.Series(['A', 'C', 'B'], index=list("甲乙丙")),
}
)
df1_2 = pd.DataFrame(
{
'name': ["张三", "李四", "王五"],
'score': [100, 70, 80],
'grade': ['A', 'C', 'B'],
},
index=list("甲乙丙"),
)
df1_3 = pd.DataFrame(
{ # 行标签多一级,列标签多一级
("成绩等级表", 'name'): { ("X", "甲",): "张三", ("X", "乙",): "李四", ("X", "丙",): "王五" },
("成绩等级表", 'score'): { ("X", "甲",): 100, ("X", "乙",): 70, ("X", "丙",): 80 },
("成绩等级表", 'grade'): { ("X", "甲",): "A", ("X", "乙",): "C", ("X", "丙",): "B" }
}
)
df2_1 = pd.DataFrame(
[
["张三", 100, 'A'],
["李四", 70, 'C'],
["王五", 80, 'B'],
],
index=list("甲乙丙"),
columns=['name', 'score', 'grade'],
)
# print(df1_1, df1_2, df1_3, df2_1, sep="\n\n")
df1_1