- Anaconda的包管理功能-可以通过命令安装
conda install 包名字
pip install 包名字
注意,使用pip时最好指定安装源:
阿里云:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.douban.com/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
pip install 包名 -i https://mirrors.aliyun.com/pypi/simple/
#通过阿里云镜像安装
-
通过命令行创建虚拟环境
-
#创建虚拟环境
conda create -n 虚拟环境的名字 python=python版本
-
#进入虚拟环境
conda activate 虚拟环境的名字
-
#退出虚拟环境
conda deactivate 虚拟环境的名字
-
删除虚拟环境
conda remove -n 虚拟环境的名字 --all
-
Jupyter Notebook的使用
-
#终端启动-Jupyter Notebook
-
- 切换虚拟环境 conda activate 虚拟环境名字
- 切换到启动的文件夹路径 cd c:/
3.启动jupyter jupyter notebook
-
Panadas的介绍
-
Numpy(Numerical python) 是 Python 语言的一个扩展程序库
- 是一个运行速度非常快的数学库,主要用于数组计算
-
pandas 是一个强大的数据结构化分析工具
-
1)它的使用基础是Numpy(提供高性能的矩阵运算)
2)用于数据挖掘和数据分析,同时也提供数据清洗功能
-
-
Matplotlib
- Matplotlib 是一个功能强大的数据可视化开源Python库
- Python中使用最多的图形绘图库
- 可以创建静态,动态和交互式的图表
-
Seaborn
- Seaborn是一个Python数据可视化开源库
- 建立在matplotlib之上,并集成了pandas的数据结构
- Seaborn通过更简洁的API来绘制信息更丰富,更具吸引力的图像
- 面向数据集的API,与Pandas配合使用起来比直接使用Matplotlib更方便
Panadas的使用
- 导包
import pandas as pd
import numpy as np
- 加载csv和tsv
# 2,读取csv文件
f = pd.read_csv('data/tips.csv')
# 2,读取tsv文件
f = pd.read_csv('data/gapminder.tsv', sep='\t')
#查看行
f.index
#查看列
f.columns
#把列标签year设置为行索引
f.set_index('year')
数据取值操作
- dataframe loc 的取值操作
#把值用变量代替
china_df = f.set_index('year')
#示例1:获取行标签为 1952, 1962, 1972 行的 country、pop、gdpPercap 列的数据
china_df.loc[[1952, 1962, 1972],[country、pop、gdpPercap]]
# 示例2:获取行标签为 1952, 1962, 1972 行的所有列的数据
china_df.loc[[1952, 1962, 1972] , : ]
# 示例3:获取所有行的 country、pop、gdpPercap 列的数据
china_df.loc[:,['country', 'pop', 'gdpPercap']]
# 示例4:获取行标签为 1957 行的所有列的数据
china_df.loc[[1957], :]
china_df.loc[1957, :]
# 示例5:获取行标签为 1957 行的 lifeExp 列的数据
china_df.loc[[1957], ['lifeExp']]
#不加中括号会显示series类型的数据
china_df.loc[1957,"lifeExp"]
- dataframe iloc 的取值操作
# 示例1:获取行位置为 0, 2, 4 行的 0、1、2 列的数据
china_df.iloc[[0,2,4], [0,1,2]]
#示例2:获取行位置为 0, 2, 4 行的所有列的数据
china_df.iloc[[0,2,4]]
# 示例3:获取所有行的列位置为 0、1、2 列的数据
china_df.iloc[: , [0,1,2]]
# 示例4:获取行位置为 1 行的所有列的数据
china_df.iloc[[1]]
# 示例5:获取行位置为 1 行的列位置为 2 列的数据
china_df.iloc[1,[2]]
china_df.iloc[[1],2]
china_df.iloc[1,2]
dataframe中 iloc 和loc的切片取值操作
- df.loc[起始行标签:结束行标签, 起始列标签:结束列标签]
- df.iloc[起始行位置:结束行位置, 起始列位置:结束列位置]
# 示例1:获取 china_df 中前三行的前三列的数据,分别使用上面介绍的loc和iloc实现
china_df.iloc[0:3 , 0:3]
china_df.loc[1952:1962 ,'country':'lifeExp']
- dataframe中 []的取值操作
- df[[‘列标签1’, ‘列标签2’, …]]
- df[‘列标签’]
- df[[‘列标签’]]
- df[起始行位置:结束行位置]
# 示例1:获取所有行的 country、pop、gdpPercap 列的数据
china_df[['country', 'pop', 'gdpPercap']]
# 示例2:获取所有行的 pop 列的数据
china_df[['pop']]
china_df['pop']
# 示例3:获取前三行的数据
china_df[0:3]
# 示例4:从第一行开始,每隔一行获取一行数据,一共获取3行
china_df[0:6:2]
series的用法
- 创建series列表
# series的创建
list1 = [2,4,6,8,'zhangsan']
series1 = pd.Series(list1)
series1
#也可以在创建的时候,直接指定行索引
list1 = [10,11,12,"zhangsan"]
series1 = pd.Series(data_list, index=['A','B','C','D'])
series1
- 属性
1. # s.shape 查看 Series 数据的形状
age_s1.shape
2.# s.size 查看 Series 数据的个数
age_s1.size
3.# s.index 获取 Series 数据的行标签
age_s1.index
4.# s.values 获取 Series 数据的元素值
age_s1.values
5.# s.keys() 获取 Series 数据的行标签,和 s.index 效果相同
age_s1.keys
6.# s.loc[行标签] 根据行标签获取 Series 中的某个元素数据
age_s1.loc[4]
7.# s.iloc[行位置] 根据行位置获取 Series 中的某个元素数据
age_s1.iloc[3]
8.# s.dtypes 查看 Series 数据元素的类型
age_s1.dtypes
- series的常用统计方法
# s.mean() 计算 Series 数据中元素的平均值
age_s1.mean()
# s.max() 计算 Series 数据中元素的最大值
age_s1.max()
# s.min() 计算 Series 数据中元素的最小值
age_s1.min()
# s.std() 计算 Series 数据中元素的标准差
age_s1.std()
# s.value_counts() 统计 Series 数据中不同元素的个数
name_s1 = s1['Name']
name_s1
name_s1.value_counts()
# s.count() 统计 Series 数据中非空(NaN)元素的个数
name_s1.count()
# s.describe() 显示 Series 数据中元素的各种统计值
age_s1.describe()
name_s1.describe()
- 其他统计方法
- to_frame 把Series转换为DataFrame
- sort_values 对值进行排序
- sample 返回Series的随机采样值
- mode 返回众数
series bool索引
age_s1[[True, True,True, False,False,False,False,True]]
age_s1
# 求年龄 大于平均值
age_s1[age_s1 > age_s1.mean()]
-
series的运算
- 加法的运算
#1. series 和 数字
age_s1
age_s1 + 100
age_s1* 2
age_s1
# 2.sereis + sereis (如果个数不相等多出来的会返回NaN)
age_s1 + age_s1
dataframe的用法
-
三种创建方式:
- 字典
# 字典的写法
data_dict = {
'age':[10, 29, 36],
'name':['zhangsan', 'lisi', 'wangwu'],
'gender':['男', '女', '男']
}
pd.DataFrame(data_dict)
- columns指定行/ index指定列
# 2. 通过 columns index 执行 行索引值 列的名字
data_dict1 = {
'age' : [29,23,12],
'name' : ['张三', '李四', '王五'],
'gender': ['男', '男' , '男']
}
df = pd.DataFrame(data_dict1, columns=['name', 'age', 'gender'], index = ['01', '02', '03'])
df
- 嵌套的方式
# 3. 列表嵌套 实现
data_list1 =[[10,'张三'],
[50 , '李四']]
pd.DataFrame(data_list1,
columns=['age','name'],
index= ['01', '02'] )
- dataframe的常用属性
# df.shape 查看 DataFrame 数据的形状
df.shape
# df.size 查看 DataFrame 数据元素的总个数
df.size
# df.ndim 查看 DataFrame 数据的维度
df.ndim
# len(df) 获取 DataFrame 数据的行数
len(df)
# df.index 获取 DataFrame 数据的行标签
df.index
# df.columns 获取 DataFrame 数据的列标签
df.columns
# df.dtypes 查看 DataFrame 每列数据元素的类型
df.dtypes
# df.info() 查看 DataFrame 每列的结构
df.info()
# df.head(n) 获取 DataFrame 的前 n 行数据,n 默认为 5
df.head(2)
# df.tail(n) 获取 DataFrame 的后 n 行数据,n 默认为 5
df.tail(1)
dataframe的统计方法
-
df.max()
-
df.min()
-
df.count() 统计非空个数
-
df.Describe() 显示所都信息
#默认只显示数据值类型的统计值,要想显示其他的引入 包numpy
# s.max() 计算 DataFrame 数据中每列元素的最大值
df.max()
# s.min() 计算 DataFrame 数据中每列元素的最小值
df.min()
# s.count() 统计 DataFrame 数据中每列非空(NaN)元素的个数
df.count()
# s.describe() 显示 DataFrame 数据中每列元素的各种统计值
df.describe(include=object)
加include=object就可以显示字符型
df.describe() 只显示的是数值型
import numpy as np
df.Describe(include = [np.object])
- dataframe的bool索引
bool_values = [True,True, False]
df[bool_values]
# 应用:获取 scientists 中 Age 大于平均值的科学家信息
df[df['age'] > df['age'].mean()]
- dataframe的运算
# DataFrame 和 数值型数据运算
df * 2
# DataFrame 和 另一 DataFrame 运算
df + df
df[:2] + df
dataframe的行列标签操作
-
df.rename(index={‘原行标签名’: ‘新行标签名’, …}, columns={‘原列标签名’: ‘新列标签名’, …})
-
df.index = ['新行标签名1', '新行标签名2', ...]
df.columns = ['新列标签名1', '新列标签名2', …]
# 把姓名列设置为行索引
new1 = df.set_index('name')
# 重置索引
new1.reset_index()
# 加载数据的时候 --设置 某一列 为索引
second_df = pd.read_csv('data/scientists.csv', index_col=0 )
second_df
# rename 可以局部修改
row_name = {'Rosaline Franklin':' small rosline frnklin'}
colum_name = {'Age':'age'}
second_df.rename(index=row_name, columns=colum_name)
# 全列和全行修改
second_df.index = ['A','B','C','D','E','F','G',"A"]
second_df.columns = ['Born', 'Died','AGE','Occupation']
second_df
-
dataframe的行操作
-
增加append()
- df.append(other)
-
修改loc iloc
- df.loc[[‘行标签’, …],[‘列标签’, …]]
- df.iloc[[‘行位置’, …],[‘列位置’, …]]
-
删除drop()
- df.drop([‘行标签’, …])
# 新增数据
new_series = pd.Series([ 18, '男', '老刘'], index=['age' ,'gender', 'name'])
new1.append(new_series, ignore_index=True)
# 读取数据
new_sci = pd.read_csv('data/scientists.csv')
new_sci
# 用loc方法 修改 第3行 Name Age
new_sci.loc[3,['Name', 'Age']] = ['laoliu', 30]
new_sci
# 修改 第3行的数据 -整行数据
new_sci.loc[3] = ['liuhaha', '2021-08-04', '2021-08-04', 18, 'usa']
new_sci
# iloc去下标值的用法
# 修改 第4行 Name Age
new_sci.iloc[4, [0,3]] = ['laozhang', 100]
new_sci
# 删除数据
# 把年龄设置为行索引
new_s2 = new_sci.set_index('Age')
new_s2
# 删掉1和3行
new_s2.drop([37, 90])
-
dataframe的列操作
-
增加
-
修改 (有原列名的更改原列名,没有原列名新增加一列)
- df[‘列标签’]=新列
- df.loc[:, 列标签]=新列
-
删除
- df.drop([‘列标签’, …], axis=1)
new_s2
# 列的操作
name_l = ['weiren1', 'weiren2', 'weiren3','weiren4','weiren5','weiren6','weiren7','weiren8']
new_s2['Name'] = name_l
new_s2
# 有原列名的更改原列名,没有原列名新增加一列
num = ['person','person','person','person','person','person','person','person']
new_s2.loc[:, ['type']] = num
new_s2
# 删除
new_s2.drop(['type'] , axis=1)
new_s2
- dataframe–数据的导入导出
- 三种文件格式的导入和导出
1. # csv 导出
scientists.to_csv('./a.csv', index=False)
# csv 导入
data_sci = pd.read_csv('a.csv')
2. # excel 导出
scientists.to_excel('b.xls', index=False, sheet_name="科学家")
# excel 导入
data_excl = pd.read_excel('b.xls')
3. #pickle导出 --- (只有python能用)
scientists.to_pickle('c.p')
# pickle
data_pickle = pd.read_pickle('c.p')
dataframe的查询
dataframe-条件查询
- df.loc[]两种
# 条件查询--loc[] , query()
# 查询 年纪> 60 并且年纪< 80
# 方法一:
df.loc[(df['Age'] > 60)&(df['Age'] < 80)]
# 方法二:
df.loc[(df.Age > 60)&(df.Age < 80)]
- df.qury ()
# 查询 年纪> 60 并且年纪< 80
# 方法三:
df.query('Age > 60 & Age < 80')
-
dataframe-分组聚合
-
df.groupby(列标签, …) . 列标签 . 聚合函数() --示例二
# 示例:按照 Occupation 职业分组,并计算每组年龄的平均值
df.groupby('Occupation')['Age'].mean()
# 示例二:按照 Name 职业分组,并计算每组年龄的平均值
df.groupby('Name').Age.mean()
- df.groupby(列标签, …).agg({‘列标签’: ‘聚合’, …})
- df.groupby(列标签, …).aggregate({‘列标签’: ‘聚合’, …})
# 2. 按照 职业 分组 --- 求 人数的个数 和 年龄 --平均值
df.groupby('Occupation').agg({'Name':'count', 'Age': 'mean'})
或
df.groupby('Occupation').aggregate({'Name':'count', 'Age': 'mean'})
dataframe和series–排序操作
- df.sort_values(by=[‘列标签’], ascending=True)
- df.sort_index(ascending=True)
# df.sort_values(by=['列标签'], ascending=True)
# 1. DataFrame 排序 -- 值 --- 求 年纪 从大到小 排序
df.sort_values('Age', ascending=True)
# 2. DataFrame 排序 -行索引降序
# df.sort_index(ascending=True)
df.sort_index(ascending=False)
# Series 排序 求 年纪 从大到小 排序
df.Age.sort_values(ascending=False)
df.Age.sort_index(ascending=False)
dataframe–函数
-
按照 columns 指定的列进行降序排序,并取前 n 行数据
最大值
df.nlargest(n, columns)
# df.nlargest(n, columns)
# 示例:获取 Age 最大的前 3 行数据
df.nlargest(3, 'Age')
最小值
df.nsmallest(n, columns)
# df.nsmallest(n, columns)
# 示例:获取 Age 最小的前 3 行数据
df.nsmallest(3, 'Age')
基本绘图
绘图
- 用plot()语法绘图
# 1. 按照 职业 分组 --- 年龄 --平均值
avg_group_mean = df.groupby('Occupation')['Age'].mean()
avg_group_mean
# 2.plot() 绘图
# figsize = (宽度, 高度)
avg_group_mean.plot(figsize=(10 , 5))