Pandas库的使用


读取文件
# 读取excel文件
df = pd.read_excel("abc.xlsx")

# 读取MySQL数据库
import pymysql
conn = pymysql.connect(
    host = '127.0.0.1',
    user = 'root',
    password = '123456',
    database = 'test',
    charset = 'utf-8'
)

mysql_page = pd.read_sql("select * from 表名", con = conn)

查询行和列
# 查询一列
df[['列名']]

# 查询多列
df[['列名1','列名2']]

# 查询一行  index会变成列名
df.loc[索引号]

# 查询多行
df.loc[索引号1, 索引号2]

查询数据

Pandas查询数据的几种方法:

  • df.loc方法,根据行、列的标签值查询
  • df.iloc方法,根据行、列的数字位置查询
  • df.where方法
  • df.query方法

在这里插入图片描述

# 替换掉温度的后缀
df.loc[:,'bWendu'] = df['bWendu'].str.replace('℃','').astype('int32')

1. 使用单个label值查询数据

行或者列,都可以只传入单个值,实现精确匹配

# 得到单个值
df.loc['2018-01-03','bWendu'] // 2

# 得到一个Series
df.loc['2018-01-03',['bWendu','yWendu']

2. 使用值列表批量查询
# 得到Series
df.loc[['2018-01-03','2018-01-04','2018-01-05'],'bWendu']

# 得到DataFrame
df.loc[['2018-01-03','2018-01-04','2018-01-05'],['bWendu','yWendu']]

3. 使用范围区间进行范围查询

注意:区间既包含开始,也包含结束

# 行index按区间
df.loc['2018-01-03':'2018-01-05','bWendu']

# 列index按区间
df.loc['2018-01-03','bWendu':'fengxiang']

# 行和列都按区间查询
df.loc['2018-01-03':'2018-01-05','bWendu':'fengxiang']

4. 使用条件表达式查询
# :表示取全部的列
df.loc[df['yWendu']<-10, :]

5. 调用函数查询
# 直接写lambda表达式
df.loc[lambda df : (df['bWendu'] <= 30) & df['yWendu'] >= 15), :]

# 编写自己的函数
def query_my_data(df):
    return df.index.str.startwith('2018-09') & df['aqiLevel'] == 1

df.loc[query_my_data, :]    

新增数据列

1. 直接赋值
df.loc[:,'wencha'] = df['bWendu'] - df['yWendu']

2. df.apply()方法
def get_wendu_type(x):
    if x['bWendu'] > 33:
        return "高温"
    elif x['bWendu'] < -10:
        return "低温"
    else:
        return "常温"

# 设置axis=1表示索引是DataFrame的列
df.loc[:,'wendu_type'] = df.apply(get_wendu_type, axis=1)

3. 按条件选择分组分别赋值
# 先创建空列
df['wencha_type'] = '' 

df.loc[df.['bWendu'] - df.['yWendu'] > 10, 'wencha_type'] = '温差大'

df.loc[df.['bWendu'] - df.['yWendu'] <= 10, 'wencha_type'] = '温差正常'

数据统计函数

1. 汇总类统计
# 查看有关数据集每一列的统计数据,例如count,mean,std,min,max
df.describe()

# 查看某一特定列的最大值
df["列名"].max()

2. 唯一去重和按值计数
# 一般不用于数值列,而是枚举、分类列
df['fengxiang'].unique()  # 可以知道有哪些风向

# 按值计数
df['fengxiang'].value_counts() # 可以知道每种风向出现的次数,结果按照降序排列

3. 相关系数和协方差
# 协方差矩阵
df.cov()

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

# 单独查看空气质量和最高温度的相关系数
df['aqi'].corr(df['bWendu'])

# 查看空气质量和温差的相关系数
df['aqi'].corr(df['bWendu']-df['yWendu'])

缺失值处理

Pandas处理缺失值使用的函数:

  • isnull和notnull:检测是否为空值,可用于df和series
  • dropna:丢弃、删除缺失值,其有3个参数
    1. axis:删除行还是列(axis = 0或者‘index’则按行删除,axis = 1或者‘columns则按列删除,默认按行删除
    2. how:如果等于any则任何值为空都删除,如果等于all则所有为空才删除
    3. inplace:如果为True则修改当前df,否则返回新的df
  • fillna:填充空值,其有4个参数
    1. value:用于填充的值,可以是单个值,或者字典(key是列名,value是值)
    2. method:等于ffill使用前一个不为空的值填充,等于bfill使用后一个不为空的值填充
    3. axis:按行还是列进行填充
    4. inplace:如果为True则修改当前df,否则返回新的df
# 删除全是空值的列
df.dropna(axis="columns", how="all", inplace=True)

# 将值为空的列填充为0
df.fillna({"列名":0})
# 等同于
df.loc[:, '列名'] = df['列名'].fillna(0)

# 用前面的有效值填充缺失值
df.loc[:, '列名'] = df['列名'].fillna(method='ffill')

数据排序

Series的排序:

Series.sort_values(ascending=True, inplace=False)

  • ascending:默认为True升序排列,为False降序排列
  • inplace:是否修改原始Series

DataFrame.sort_values(by,ascending=True, inplace=False)

  • by:字符串或者List<字符串>,单列排序或者多列排序
  • ascending: boolean或者List,升序还是降序,如果是list对应by 的多列
  • inplace:是否修改原始DataFrame
# Series的排序
df['aqi'].sort_values(ascending=False)

# DataFrame的排序
df.sort_values(by='aqi', ascending=False)

# 多列排序
df.sort_values(by=['aqiLevel','bWendu'], ascending=[True, False])

字符串处理
  • 使用方法:先获取Series的str属性,然后在属性上调用函数
  • 只能在字符串列上使用,不能在数字列上使用
  • DataFrame上没有str属性和处理方法
  • Series.str并不是Python原生字符串,而是自己的一套方法,不过大部分和原生str很相似
# 判断是不是数字
df['bWendu'].str.isnumberic()

(未完待续~)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值