pandas基础知识

  • 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

      1. 切换虚拟环境 conda activate 虚拟环境名字
      2. 切换到启动的文件夹路径 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))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值