编程工具;jupyter notebook
1. 导入库
import pandas as pd
import warnings
2. 屏蔽警告提示
warnings.filterwarnings(;ignore;)
3.读取Excel
df = pd.read_excel(;./data/demo_01.xlsx;, engine=;openpyxl;) # 相对路径;engine=;openpyxl; 引擎可以不加;但是旧版本需要加
df = pd.read_excel(;./data/demo_01.xlsx;)
4.预览前5行
df.head(5)
5.列名对齐
display.unicode.ambiguous_as_widedisplay.unicode.east_asian_widthpd.set_option(;display.unicode.ambiguous_as_wide;, True)
pd.set_option(;display.unicode.east_asian_width;, True)
6.禁止换行
pd.set_option(;expand_frame_repr;, False)
7.显示所有行
pd.set_option(;display.max_rows;, None)
8.最多显示10行
pd.set_option(;display.max_rows;, 10)
9.显示所有列
pd.set_option(;display.max_columns;, None)
10.最多显示10列
pd.set_option(;display.max_columns;, 10)
11.设置内容的显示宽度
pd.set_option(;display.width;, 100)
12.设置数值的显示精度
pd.set_option(;display.precision;, 2)
13.设置小数的显示格式
pd.set_option(;display.float_format;, lambda x: %.2f; % x)
# ;{:.2f};.format(x);小数点
# ;{:.2%};.format(x);百分比
14.设置计算引擎
pd.set_option(;compute.use_numba;, True) # 当数据处理量较大速度较慢时可以设置为此计算引擎
15.获取指定选项的设置情况
pd.get_option(;compute.use_numba;)
16.条件格式
# pandas.io.formats.style.Styler
df.style.Highlight_max() #高亮显示最大值
import pandas as pd
pd.Series([80,90,88]) #pd.Series(data=None,index=None,dtype=None,name=None,copy=False,fastpath=False,)
2.1 数字索引
pd.Series(data=[80,90,88],index=[1,2,3])
2.2字符串索引
pd.Series(data=[80,90,88],index=[;张三;,;李四;,;王五;])
s4 = pd.Series(data=[80,90,88,96],index=[;张三;,;李四;,;王五;,;赵六;])
s4
# 取第一个同学的成绩
s4[0],s4[;张三;]
3.1通过索引号获取值
s4[0]
80
3.2通过索引名获取值
s4[;张三;]
80
3.3通过多个索引名获取值
s4[ [;张三;,;赵六;] ]
张三 80 赵六 96 dtype: int64
3.4通过索引名切片获取值
s4
张三 80 李四 90 王五 88 赵六 96 dtype: int64
s4[;张三;:;王五;] # 通过索引名切片;左右都包含;通过索引号切片左闭右开
张三 80 李四 90 王五 88 dtype: int64
3.5通过索引号切片获取值
s4[:3] #通过索引号切片左闭右开
张三 80 李四 90 王五 88 dtype: int64
3.6获取Series的索引
s4.index # 获取s4的索引
Index([;张三;, ;李四;, ;王五;, ;赵六;], dtype=;object;)
3.7获取Series的值
s4.values # 获取s4的值
array([80, 90, 88, 96], dtype=int64)
type(s4.values)
numpy.ndarray
3.8判断Series是否包含空值
s4.hasnans
False
import pandas as pd
data = [[110, 105, 99],
[105, 88, 115],
[109, 120, 130]]
index = [0, 1, 2]
columns = [;语文;, ;数学;, ;英语;]
#pd.DataFrame(data=None,index:;Optional[Axes];=None,columns:;Optional[Axes];=None,dtype:;Optional[Dtype];= None,copy:;bool;=False)
df = pd.DataFrame(data=data,index=index,columns=columns)
df
df[;语文;]
0 110 1 105 2 109 Name: 语文, dtype: int64
type(df[;语文;])
pandas.core.series.Series
for col in df.columns:
print(type(df[col]))
<class ;pandas.core.series.Series;> <class ;pandas.core.series.Series;> <class ;pandas.core.series.Series;>
dct = {
;语文;: [110, 105, 99],
;数学;: [105, 88, 115],
;英语;: [109, 120, 130]}
df = pd.DataFrame(data=dct,index=[1,2,3])
df
dct = {
;语文;: 110,
;数学;: 105,
;英语;: 109}
df = pd.DataFrame(data=dct,index=[0]) # 一行数据 index 也要传入列表格式
df
dct = {;语文;: [110],
;数学;: [105],
;英语;: [109]}
pd.DataFrame(data=dct)
5.1查看所有元素的值
dct = {
;语文;: [110, 105, 99],
;数学;: [105, 88, 115],
;英语;: [109, 120, 130]}
df = pd.DataFrame(data=dct,index=[1,2,3])
df
df.values
array([[110, 105, 109], [105, 88, 120], [ 99, 115, 130]], dtype=int64)
5.2查看某列的唯一值
df[;语文;].unique() # 查看 语文 列中去重后的数据
array([110, 105, 99], dtype=int64)
5.3查看所有元素的类型
df.dtypes # 查看每个字段的数据类型
语文 int64 数学 int64 英语 int64 dtype: object
5.4查看所有行名
# index ——> 行索引;索引
# column ——> 列索引;字段;列名
df.index
Int64Index([1, 2, 3], dtype=;int64;)
5.5重命名行名
df.index = [;a1;,;a2;,;a3;]
df
5.6查看所有列名
df.columns
Index([;语文;, ;数学;, ;英语;], dtype=;object;)
5.7重命名列名
df.columns = [;语;,;数;,;外;]
df
5.8行列转置
df.T
5.9查看前n条数据
默认5条df.head()
5.10查看前10条数据
df.head(10)
5.11查看后n条数据
默认5条df.tail()
5.12查看后10条数据
df.tail(10)
5.13查看行数
0表示行df.shape[0]
3
5.14查看列数
1表示列df.shape[1]
3
5.15查看基本信息
索引、数据类型、非空值数量和内存信息df.info()
<class ;pandas.core.frame.DataFrame;> Index: 3 entries, a1 to a3 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 语 3 non-null int64 1 数 3 non-null int64 2 外 3 non-null int64 dtypes: int64(3) memory usage: 204.0; bytes
6.1查看每列的描述统计信息
返回DataFrame类型df.describe()
type(df.describe())
pandas.core.frame.DataFrame
df.describe().round(2) # 保留两位小数
6.2返回每列非空值数量
df.count()
语 3 数 3 外 3 dtype: int64
6.3返回每列的合计
无法计算返回空值df.sum()
语 314 数 308 外 359 dtype: int64
6.4返回每列的最大值
df.max()
语 110 数 115 外 130 dtype: int64
6.5返回每列的最小值
df.min()
语 99 数 88 外 109 dtype: int64
6.6返回最大值的索引号
原始的数字索引df
# 原始索引;从0开始递增
df[;语;].argmax() # 语文中最大的原始索引
0
6.7返回最小值的索引号
原始的数字索引df[;语;].argmin()
2
6.8 返回最大值的索引名
自定义的索引df[;语;].idxmax()
;a1;
6.9返回最小值的索引名
自定义的索引df[;语;].idxmin()
;a3;
6.10返回每列的平均值
df.mean()
语 104.666667 数 102.666667 外 119.666667 dtype: float64
6.11返回每列的中位数
中位数又称中值;按顺序排列后处于中间位置的数值df.median()
语 105.0 数 105.0 外 120.0 dtype: float64
6.12返回每列的方差
用于衡量一组数据的离散程度df.var()
语 30.333333 数 186.333333 外 110.333333 dtype: float64
6.13返回每列的标准差
标准差是方差的算术平方根也用于衡量一组数据的离散程度df.std()
语 5.507571 数 13.650397 外 10.503968 dtype: float64
6.14检查df中的空值
空值为True;否则为False;返回布尔型数组df.isnull()
6.15检查df中的非空值
非空值为True;否则为False;返回布尔型数组df.notnull()
import pandas as pd
df1 = pd.read_excel(;./data/demo_04.xlsx;) # 默认读取第一个工作表
df1.head(5)
pd.read_excel(;./data/demo_04.xlsx;, sheet_name=;工作表2;) # 参数 sheet_name 设为想要读取的工作表名称
pd.read_excel(;./data/demo_04.xlsx;, sheet_name=;工作表3;) # 默认第一行作为表头
pd.read_excel(;./data/demo_04.xlsx;, sheet_name=;工作表3;,header=1)
pd.read_excel(;./data/demo_04.xlsx;, sheet_name=;工作表1;,usecols=[0])
pd.read_excel(;./data/demo_04.xlsx;, sheet_name=;工作表1;,usecols=[0,3])
pd.read_excel(;./data/demo_04.xlsx;, sheet_name=;工作表1;,usecols=[;name;,;sex;])
pd.read_csv(;./data/demo_04.csv;,encoding=;utf-8;)
pd.read_csv(;./data/demo_04.txt;,encoding=;utf-8;,sep=; ;) # 参数 sep 设置分隔符;默认是逗号
;1;index结构
# {
# ;0;: {
# ;姓名;: ;王晨;,
# ;电话;: 13807990096
# },
# ;1;: {
# ;姓名;: ;刘英;,
# ;电话;: 15317068630
# },
# ;2;: {
# ;姓名;: ;王婷;,
# ;电话;: 15069162098
# },
# ;3;: {
# ;姓名;: ;余颖;,
# ;电话;: 15110247460
# },
# ;4;: {
# ;姓名;: ;程秀珍;,
# ;电话;: 15052126982
# },
# ;5;: {
# ;姓名;: ;孙飞;,
# ;电话;: 15187633436
# },
# ;6;: {
# ;姓名;: ;戚阳;,
# ;电话;: 15749935938
# },
# ;7;: {
# ;姓名;: ;李璐;,
# ;电话;: 18712343795
# },
# ;8;: {
# ;姓名;: ;秦静;,
# ;电话;: 15800229061
# },
# ;9;: {
# ;姓名;: ;张莹;,
# ;电话;: 13718317243
# }
# }
pd.read_json(;./data/index.json;,orient=;index;) # 通过 orient 参数修改 json 的数据结构格式
;2;records结构
# [
# {
# ;姓名;: ;王晨;,
# ;电话;: 13807990096
# },
# {
# ;姓名;: ;刘英;,
# ;电话;: 15317068630
# },
# {
# ;姓名;: ;王婷;,
# ;电话;: 15069162098
# },
# {
# ;姓名;: ;余颖;,
# ;电话;: 15110247460
# },
# {
# ;姓名;: ;程秀珍;,
# ;电话;: 15052126982
# },
# {
# ;姓名;: ;孙飞;,
# ;电话;: 15187633436
# },
# {
# ;姓名;: ;戚阳;,
# ;电话;: 15749935938
# },
# {
# ;姓名;: ;李璐;,
# ;电话;: 18712343795
# },
# {
# ;姓名;: ;秦静;,
# ;电话;: 15800229061
# },
# {
# ;姓名;: ;张莹;,
# ;电话;: 13718317243
# }
# ]
pd.read_json(;./data/records.json;,orient=;records;)
;3;split结构
# {
# ;columns;: [
# ;姓名;,
# ;电话;
# ],
# ;index;: [
# 0,
# 1,
# 2,
# 3,
# 4,
# 5,
# 6,
# 7,
# 8,
# 9
# ],
# ;data;: [
# [
# ;王晨;,
# 13807990096
# ],
# [
# ;刘英;,
# 15317068630
# ],
# [
# ;王婷;,
# 15069162098
# ],
# [
# ;余颖;,
# 15110247460
# ],
# [
# ;程秀珍;,
# 15052126982
# ],
# [
# ;孙飞;,
# 15187633436
# ],
# [
# ;戚阳;,
# 15749935938
# ],
# [
# ;李璐;,
# 18712343795
# ],
# [
# ;秦静;,
# 15800229061
# ],
# [
# ;张莹;,
# 13718317243
# ]
# ]
# }
pd.read_json(;./data/split.json;,orient=;split;)
;4;table结构
# {
# ;schema;: {
# ;fields;: [
# {
# ;name;: ;index;,
# ;type;: ;integer;
# },
# {
# ;name;: ;姓名;,
# ;type;: ;string;
# },
# {
# ;name;: ;电话;,
# ;type;: ;integer;
# }
# ],
# ;primaryKey;: [
# ;index;
# ],
# ;pandas_version;: ;0.20.0;
# },
# ;data;: [
# {
# ;index;: 0,
# ;姓名;: ;王晨;,
# ;电话;: 13807990096
# },
# {
# ;index;: 1,
# ;姓名;: ;刘英;,
# ;电话;: 15317068630
# },
# {
# ;index;: 2,
# ;姓名;: ;王婷;,
# ;电话;: 15069162098
# },
# {
# ;index;: 3,
# ;姓名;: ;余颖;,
# ;电话;: 15110247460
# },
# {
# ;index;: 4,
# ;姓名;: ;程秀珍;,
# ;电话;: 15052126982
# },
# {
# ;index;: 5,
# ;姓名;: ;孙飞;,
# ;电话;: 15187633436
# },
# {
# ;index;: 6,
# ;姓名;: ;戚阳;,
# ;电话;: 15749935938
# },
# {
# ;index;: 7,
# ;姓名;: ;李璐;,
# ;电话;: 18712343795
# },
# {
# ;index;: 8,
# ;姓名;: ;秦静;,
# ;电话;: 15800229061
# },
# {
# ;index;: 9,
# ;姓名;: ;张莹;,
# ;电话;: 13718317243
# }
# ]
# }
pd.read_json(;./data/table.json;,orient=;table;)
;5;values结构
# [
# [
# ;王晨;,
# 13807990096
# ],
# [
# ;刘英;,
# 15317068630
# ],
# [
# ;王婷;,
# 15069162098
# ],
# [
# ;余颖;,
# 15110247460
# ],
# [
# ;程秀珍;,
# 15052126982
# ],
# [
# ;孙飞;,
# 15187633436
# ],
# [
# ;戚阳;,
# 15749935938
# ],
# [
# ;李璐;,
# 18712343795
# ],
# [
# ;秦静;,
# 15800229061
# ],
# [
# ;张莹;,
# 13718317243
# ]
# ]
df = pd.read_json(;./data/values.json;,orient=;values;)
df.columns = [;姓名;,;电话;] # values 需要自己定义字段名称
df
import pandas as pd
data = [[109, 107, 100],
[105, 114, 135],
[98, 88, 120],
[145, 150, 130]]
name = [;刘备;, ;关羽;, ;张飞;, ;诸葛亮;]
columns = [;语文;, ;数学;, ;英语;]
df = pd.DataFrame(
data=data,
index=name,
columns=columns)
df
# 通过名称筛选
df.loc[;刘备;]
语文 109 数学 107 英语 100 Name: 刘备, dtype: int64
type(df.loc[;刘备;])
pandas.core.series.Series
# 通过索引号筛选
df.iloc[0]
语文 109 数学 107 英语 100 Name: 刘备, dtype: int64
df.iloc[[0,3]] # 读取下表为 0 ;3 的行
4.1从“刘备”到“诸葛亮”
df.loc[;刘备;:;诸葛亮;] # 通过切片方式;左闭右闭
4.2第1行到“关羽”
df.loc[:;关羽;]
4.3第1行到第4行
df.iloc[:4]
4.4第2行到最后1行
df.iloc[1:]
df
5.1直接使用列名
df[;语文;]
刘备 109 关羽 105 张飞 98 诸葛亮 145 Name: 语文, dtype: int64
df[[;语文;]]
df[[;语文;,;数学;]]
5.2使用loc和iloc
5.2.1抽取“语文”和“数学”
df.loc[:,[;语文;,;数学;]]
5.2.2抽取第1列和第2列
df.iloc[:,[0,1]]
5.2.3抽取从“语文”开始到最后1列
df.loc[:,;语文;:]
5.2.4抽取从第1列开始到第3列
df.iloc[:,:3]
6.1 “英语”成绩
df.loc[:,;英语;]
刘备 100 关羽 135 张飞 120 诸葛亮 130 Name: 英语, dtype: int64
6.2“关羽”的“英语”成绩
df.loc[;关羽;,;英语;]
135
df.loc[[;关羽;],[;英语;]]
6.3“关羽”的“数学”和“英语”成绩
df.loc[[;关羽;],[;英语;,;数学;]]
6.4第2行第3列
df.iloc[1,2]
135
df.iloc[[1],[2]]
6.5第2行到最后1行;第3列
df.iloc[1:,[2]]
6.6第2行到最后1行;第1列和第3列
df.iloc[1:,[0,2]]
6.7所有行;第3列
df.iloc[:,[2]]
df
7.1 语文大于105且数学大于88
df.loc[ (df[;语文;] > 105) & (df[;数学;] > 88) ] # 注意加括号
cod1 = df[;语文;] > 105
cod2 = df[;数学;] > 88
df.loc[ cod1 & cod2]
7.2 语文大于105或数学大于88
df.loc[ (df[;语文;] > 105) | (df[;数学;] > 88) ] # 注意加括号
cod1 = df[;语文;] > 105
cod2 = df[;数学;] > 88
df.loc[ cod1 | cod2]
7.3 语文不等于105
!=df.loc[ df[;语文;] != 105 ]
7.4 语文不等于105
~df.loc[~(df[;语文;] == 105)] # 注意括号