有关python建模的学习笔记(5)(pandas库函数)

pandas库(参考自https://www.jianshu.com/p/6acafa350208 

https://blog.csdn.net/zengxiantao1994/article/details/75200110,哔站上也有超多学习视频)

pandas是提供高性能易用数据类型和分析工具,可用于处理csv、tsv、txt、mysql(关系型数据库表)、excel、html等文件

首先先引入

import pandas as pd

1、读取数据(参考自https://www.bilibili.com/video/BV1UJ411A7Fs?p=2

# 读文件 CSV,文件名为ratings
fpath = ".../ratings.csv"      # 写明路径
ratings = pd.read_csv(fpath)   # 读取数据
ratings.head()                 # 查看前几行数据:从左至右为索引,列名,数据体
ratings.shape                  # 输出行数和列数
ratings.columns                # 查看列名列表
ratings.index                  # 查看索引列
ratings.dtypes                 # 查看每列的数据类型

# 读取txt文件(由-进行分割而非逗号),文件为pvuv
fpath = ".../access_pvuv.txt"
pvuv = pd.read_csv(
    fpath,
    sep = "\t"                    # 指定地址分隔符\t
    header = None                 # 无标记行
    names = ['pdate','pv','uv']   # 设置列命名
)

# 读取 excel文件
fpath =
pvuv = pd.read(fpath)


# 读取MySQL
import pymysql
comn = pymysql.commect(
    host = '127.0.0.1',
    user = 'root',
    password = '12345678',
    database = 'test',
    charset = 'utf8'
)
mysql_page = pd.read_sql("select*from crazyant_pvuv",con = conn)   # 第一个为sql语句,第二个为建立一个连接
mysql_page

2、数据结构

 有两种数据类型,Series和DataFrame

Series一维数据,一行或者一列

(1)数据列表可产生简单的series(有无标签均可)

(2)字典创建Series

(3)标签索引可以查询

DataFrame为二维数组

(1)根据多个字典序列创建dataframe

(2)从dataframe中查询出series

只查询出一行一列的话返回pd.Series

查询出多行多列的话返回pd.DataFrame

3、数据查询

df.loc方法

(1)使用单个label的值

(2)使用值列表批量查询

(3)使用数值区间进行范围查询

(4)!!!使用条件表达式进行查询!!

返回的是布尔值

(5)调用函数查询

4、新增数据列

(1)直接复制法

温度列有C,要求去掉。把C替换为空。

df.loc[:,"wencha"] = df["bWendu"] - df["yWendu"]     # 新增温差列,为最高温减去最低温

(2)df.apply方法

传一个函数返回series

(3)df.assign方法

不修改df本身,返回的是一个新的对象

(4)按条件选择分别赋值

5、数据统计函数

(1)汇总类统计(数值类型)

df.discribe(),可计算出最小值最大值和平均值

平均值:df["列名称“].mean()

最大值:df["列名称“].max()

最小值:df["列名称“].min()

(2)唯一去重和按值列数(不用于数值列,用于枚举、分类列)

去重:df["列名称”].unique

按值计数:df["列名称“].value_counts()

按值计数则为每个名称出现了多少次的统计,会从大到小依次输出。

(3)相关系数和协方差

 

 协方差矩阵:df.cov()

相关系数矩阵:df.corr()

单独查看两列的相关系数:df["列名称”].corr(df["列名称“])

 6、Pandas对函数缺失值的处理https://www.bilibili.com/video/BV1UJ411A7Fs?p=7

isnull和notnull:检测是否为空

dropna:删除缺失值:

  • axis : 删除行还是列,{0 or ‘index’, 1 or ‘columns’}, default 0
  • how : 如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除
  • inplace : 如果为True则修改当前df,否则返回新的df

 fillna:填充空值

  • value:用于填充的值,可以是单个值,或者字典(key是列名,value是值)
  • method : 等于ffill使用前一个不为空的值填充forword fill;等于bfill使用后一个不为空的值填充backword fill
  • axis : 按行还是列填充,{0 or ‘index’, 1 or ‘columns’}
  • inplace : 如果为True则修改当前df,否则返回新的df

7、SettingWithCopyWarning报警解决方法

https://github.com/peiss/ant-learn-pandas/blob/master/08.%20Pandas%E7%9A%84SettingWithCopyWarning%E6%8A%A5%E8%AD%A6%E6%80%8E%E4%B9%88%E8%A7%A3%E5%86%B3.ipynb

8、数据排序

Series:

import pandas as pd

# Series排序
pd.Series.sort_values(ascending=True,inplace=False)
# ascending:默认为True升序排序,False降序排序。inplace:是否修改原始Series

#DataFrame的排序
pd.DataFrame.sort_values(by,ascending=True,inplace=False)
# by:字符串或者list,单列排序或者多列排序;ascending:布尔型或者列表;inplace:是否修改原始DataFrame

# 多列排序
pd.DataFrame.sort_values(by=["列名称"."列名称"])

9、字符串处理

先获取Series的str属性,使用各种字符串处理函数。

应用领域:1.使用str的startwith、contain等bool类Series可以做条件查询。

                   2.需要多次str处理的链式操作。

                   3.使用正则表达式的处理。

10、axis参数的理解https://www.jianshu.com/p/4f18e8327872

0/index,指某一行,聚合操作则指跨行。1/columns,指某一列,聚合操作则指跨列

import numpy as np
df = pd.DataFrame(
    np.arange(12).reshape(3,4),
    columns = ['A','B','C','D']
)
df.drop("A", axis=1)       # 删除列
df.drop(1, axis=0)         # 删除行
df.mean(axis=1)            # 指定了哪个axis,这个axis就要动起来,类似被for遍历,其他axis表示不变.1指的是列,为输出某一列的平均数。
df.sum(axis=0)             # 求每列数据之和
df.sum(axis=1)             # 求每行数据之和

在此注意,在进行了删除、求和、求平均的操作之后,需要把操作结果赋给另一个dataframe的数据。

import pandas as pd
import numpy as np
df = pd.DataFrame(
    np.arange(12).reshape(3,4),
    columns = ['A','B','C','D']
)
a=df.mean(axis=1)    
print(df)
print(a)

结果为:

 11、Pandas的索引index的用途

用途:更方便的数据查询;性能的提升;自动数据对齐;更强大的数据结构的支持

(1)查询前五行

df.loc[500].head(5)

 (2)提升查询性能:

若index是唯一的,Pandas会用哈希表优化,时间复杂度为O(1)

不唯一的话,会用二分法查询,性能为O(logN)

如果是完全随机的,则每次查询都要扫描全表,查询性能为O(N)

(3)自动对齐,列表相加减时自动对齐

# index自动对齐数据
s1 = pd.Series([1,2,3],index=list("abc"))
s2 = pd.Series([2,3,4],index=list("bcd"))
print(s1+s2)

 (4)数据结构支持

CategoricalIndex,基于分类数据的Index,提升性能。

MultiIndex,多维索引,用于groupby多为聚合后结果等。

DatetimeIndex,时间类型索引,强大的日期和时间的方法支持。

 12、Merge语法(合并)

merge的数量对齐关系

一对一,关联的关键词均唯一

一对多,关联的关键词左边唯一右边不唯一

多对多,关联的关键词左右均不唯一,结果条数为M*N

四个join的区别

13、Pandas实现数据的合并concat

应用场景:批量合并相同格式的Excel、给DataFrame添加行、给DataFrame添加列。

即:使用某种合并方式(inner/outer)沿着某个轴向(axis=0/1)把多个Pandas对象(DataFrame\Series)合并成一个。

pandas.concat(objs,axis=0,join='outer',ignore_index=False)
# objs指要合并的对象,axis为0时是按行合并,为1时是按列合并。join为对齐方式,ignore_index指是否忽略掉原来的索引。

# append只有按行合并,没有按列合并
DataFrame.append(other,ignore_index=False)
# other指单个dataframe,series,dict或者列表。

使用join=inner过滤掉不匹配的列;使用axis=1相当于添加新列

concat的列表参数非常灵活,可以为series,也可以为dataframe。

参考自https://gitee.com/antpython/ant-learn-pandas/blob/master/14.%20Pandas%E5%AE%9E%E7%8E%B0%E6%95%B0%E6%8D%AE%E7%9A%84%E5%90%88%E5%B9%B6concat.ipynb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值