数据分析模块pandas

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from numpy import nan as NA

01.pandas基本数据结构

Series可看作带索引的单列数据。DataFrame则是表格型数据结构

pd.Series(data=None, index=None, dtype=None, name=None)

pd.DataFrame(data, index=None, columns=None, dtype=None)

自定义索引

pd.Series(data=None, index=None, dtype=None, name=None)

data:list/tuple/ndarray/dict/iterable

index:自定义索引:一维/多维LIST,或索引对象

读取Series

xxSeries[index]

xxSeries.loc[自定义索引]

xxSeries.iloc[0-n数字索引]

读取DataFrame

xxDataFrame[yy] xxDataFrame.column # 一列

xxDataFrame[[col1,col2,..]] # 多列

xxDataFrame.loc[index, column]

对DataFrame进行修改/新增数据

xxdf['已存在列'] = yyy # 修改

xxdf['不存在列'] = yyy # 新增 若yyy是Series,会进行索引匹配

xxdf.loc['已存在'] = yyy # 修改

xxdf.loc['不存在'] = yyy # 新增

删除列

del xxdf['已存在列']

02.索引 - 增删查

※:索引对象不可修改

索引-查

即读取

索引-增

xxSeries.append(s) xxDataFrame.append(df) # 新增行

xxdf.insert(loc, column, value, allow_duplicate=False) # 插入位置,列名称,值,是否允许重复索引,默认不允许

索引-删

xxdf.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='rasie') 
# 名称(们),0跨行1跨列,或者不用labels+axis,改用index删行,columns删列,多层索引,是否原值操作,默认返回新值,删除不存在索引会报错,可忽略报错ignore

03.算术运算与数据对齐

Series运算

Series1.add(Series2, fill_value=yyy)

DataFrame运算

df1 + df2

df1.add(df2, fill_value=yyy) # 行列都匹配才相加,某一个没有值自动填充,都没有则返回nan

xxdf.fillna(yyy) # nan填充

其他运算函数

add +

sub(subtract) -

mul(multiply) *

div(divide) /

floordiv //

mod %

04.聚合函数、apply与映射

聚合函数

numpy的各种聚合函数,通用函数都可直接操作pandas对象

xxSeries.sum()

xxDataFrame.sum(axis)

apply应用函数

可以对数据的行或列,或单值应用一个处理函数

xxSeries.apply(操作单值函数 [, args=函数参数元祖])

xxDataFrame.apply(操作单行或单列函数,axis=0/1 [, args=函数参数元祖])

映射

xxSeries.map(func) = xxSeries.apply(func)

xxDataFrame.applymap(func) # 把func作用在每个单元格的值上

05.pandas连接MySQL做查询

pip install pymysql

import pymysql

connect = pymysql.connect(host, port, user, password, db, charset) # 1.建立连接对象

cursor = connect.cursor() # 2.创建游标对象

sql = 'show tables;' # 3.组装SQL语句

cursor.execute(sql) # 4.执行SQL语句

cursor.fetchone() fetchmany(n) fetchall() # 5.查询语句,可查看结果,一条,n条,全部

cursor.close() # 6.关闭游标

connect.close() # 7.关闭连接对象

06.pandas读取与写入文件

1.读取剪切板

pd.read_clipboard(sep='\\s+', **kwargs)

2.读取csv文件

pd.read_csv('xx.csv', headers=None) # 不需要首行作为索引

pd.read_csv('xx.csv', names) # 自定义列名称

3.读取json文件

pd.read_json('xx.json')

4.读取MySQL

pd.read_sql(sql, connect, index_col=None, coerce_float=True) # 最后参数为数字列变为float

5.读取excel

import xlrd

pd.read_excel('xx.xlsx')

6.存储到csv

xx.to_csv()

xx.to_csv(path_or_buf=None, sep=',', na_rep='', columns=None, header=True, index=True, index_label=None, mode='w', encoding=None) 
# path_or_buf 文件名称 na_rep 换成存储

7.存储到Excel

xx.to_excel()

xx.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', header=True, index=True, startrow=0, startcol=0, engine=None, encoding=None, inf_rep='inf') 
# excel_writer 文件名称/写入对象

07.pandas排序和排名

Series 排索引

Series.sort_index(self, axis=0, level=None, ascending=Ture, inplace, kind, na_position, sort_remaining, ignore_index, key)

Series排值

Series.sort_values(self, axis=0, ascending, inplace, kind, na_position, ignore_index, key) 
# axis=0‘index’ 默认升序 默认返回新值 默认不忽略索引

排名:返回名次

Series.rank(self, axis=0, method, numeric_only, na_option, ascending=True, pct) 
# pct显示百分比名次

DataFrame排索引

DataFrame.sort_index(self, axis=0, level=None, ascending=True, inplace, kind, na_position, sort_remaining, ignore_index, key)

DataFrame 排值

DataFrame.sort_values(self, by, axis=0, ascending=True, inplace=True, kind, na_position='last', ignore_index, key) 
# by表示按照一列还是多列去排序 axis=0即index可和by配合

自然排序库natsort

pip install natsort

08.重复值判断与汇总统计

唯一值判断

xx.is_unique # 返回bool 可判断index,Series

汇总统计

常用聚合函数:count max min sum var std mean average mode...

xx.sum(axis=None, skipna=True, level=None) # 0/index 是否跳过nan

描述性统计

xx.describe()

df.info() # Series没有info(),只有describe()

09.唯一值、值计数与数据筛选

唯一值

xx一维.is_unique # 判断是否唯一

xx一维.unique() # 取出唯一值

!值统计函数

Series.value_counts(self, normalize=False, sort=True, ascending=False, bins=None, dropna=True) 
# 默认返回次数,默认降序,默认不考虑nan


pd.value_counts(values, sort=True, ascending=False, normalize=False, bins, dropna)

# values可以是Series,list tuple ndarray array_like

DataFrame值统计

df.value_counts() # 统计每行出现的次数

df.apply(pd.value_counts, axis=0) # 对df每行每列apply

Series(xxdf.values.ravel()).value_counts() # 对df整体做所有单元格值统计

pd.value_counts(xxdf.values.ravel()) # 对df整体做所有单元格值统计

数据筛选

xx.isin([xx, yy, zz]) # isin对每个值== 的判断

10.缺失值处理

缺失值怎么处理?

(1) 先理解数据集,查看数据的指标,判断 缺失数据是否对统计分析有影响

(2) 看看 缺失的数据是 数值型 还是 字符型

(3) 或者看看 缺失数据量 在 总体的占比,根据实际判断 能否 丢弃 或者填充

(4) 填充缺失数据,根据实际情况使用 0 均值 中位数 众数 等等 ,甚至复杂情况需要分组后计算再填充,防止填充值出现较大误差

(5) 还有可能取的数据源有问题,去查数据源

(6) ......

np.isnan(yy) # 返回是否是nan,处理单个或多个值

dropna()丢弃缺失值

Series.dropna(self, axis=0, inplace=False, how=None)

DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False) 
# 默认跨行,any只要有一个nan就丢弃,all则全为nan丢弃
# thresh至少保留几个非nan值,subset=[]一列或多列,默认不在原值上操作,返回新值

fillna()填充缺失值

Series.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None)

DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None) 
# value固定值填充,也可字典进行匹配式填充,method有ffill/bfill

11.pandas中的字符串处理

Series类字符串处理

Series.str.contains(self, pat, case, flags, na, regex) 
#  直接调用字符串函数,可结合正则

#  参数:pat字符串/正则 case区分大小写 flags匹配模式 na处理nan regex开始正则匹配模式

快速转换数据类型

xx.astype(dtype) # dtype 数据类型或{列1: 数据类型1, 列2: 数据类型2, ...}

12.pandas中的时间处理

import time

from datetime import datetime, timedelta

from dateutil.parser import parse

time.time() # 时间戳

pandas中日期对象

pd.to_datetime([timestr]) # 返回时间对象

pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, noormalize=False, name=None, closed=None, **kwargs) 
# 开始时间/结束时间/时间间隔/时间占位符/normalize午夜时间/名称/closed初始末尾值是否可取

13.pandas合并数据集

pd.merge(left, right, how='inner')

多列合并

相同列名称 on = ['key1', 'key2', ...]

不同列名称 left_on = ['key1', 'key2', ...]

pd.concat([a, b, c, d]) 连接数据集

pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

14.索引重塑和轴向旋转

索引重塑

Series.reset_index(level=None, drop=False, name=None, inplace=False)

DataFrame.reset_index(self, level, drop=False, inplace=False, col_level=0, col_fill='')

#  col_level=0 行索引变成列索引,在列索引的层级,col_fill=' ' 若列索引是多层,填充空余的层级的值

轴向旋转

xxdf.stack(level=默认最后一层, dropna=True) # 将列索引旋转到行索引

xxdf.unstack(level=默认最后一层, fill_value=None) # 将行索引旋转到列索引

15.数据去重、函数映射、替换值

数据去重

xx.duplicated() # 返回每个值是否是重复值的bool值

#  可以用 xx.unique() / xx.is_unique

Series.drop_duplicates(self, keep='first', inplace=False)

DataFrame.drop_duplicates(self, subset=None, keep='first', inplace=False, ignore_index=False) 
# subset多列去重,默认所有列重复才丢弃,keep保留哪个为不重复,默认第一个,是否原值操作,是否忽略索引

函数映射

使用函数和映射以及apply对数据进行处理与转换

替换值

fillna() 填充nan

xxstr.replace()

正则替换,需要数据是字符串,可先转换为str:

xx.astype(str).replace(to_replace='\w+', value=666, regex=True)

Series.replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad') 
# self/需要替换的是啥/替换成啥/默认你非正则匹配/pad-ffill-bfill

如果是不同列换成不同值,字典内包含字典就可以

xx.replace({'列1':{被替换的:替换值}, '列2':{被替换的:替换值}})

16.数据拆分与异常值检测

数据拆分pd.cut

pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)

# x : 被拆分 的对象
# bins : 分箱 区间 ,可以是 int,也可以是 [ ]
# right: bool = True : 默认 每个 bins 的区间 右侧 是 闭合 的
# labels : [] ,给每个区间 取 一个 名称
# retbins: bool = False , 是否 返回 分箱 区间
# precision: int = 3 , 默认保留 3位小数
# include_lowest: bool = False , 默认是否包含分箱 的 最小值 。 默认不包含
# duplicates: str = 'raise' , 是否 丢弃 分箱 bins内 的 重复值 。默认 不丢弃。
# ordered: bool = True , 分类 是否 排序
# 返回结果是 每个值 属于 哪个 区间 的 分类 对象

pd.qcut() 根据比例划分

异常值检测

超出预设条件值,明显区别于其他数据

数据修剪 clip

xxdf.clip(-3, 3) # 大于3变成3,小于-3变成-3,返回新值

17.数据聚合与分组计算

分组计算groupby

Series.groupby(self, by=None, axis=0, level=None, dropna=True) # by分组依据

DataFrame.groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, dropna=True) 
# level使用索引分组 as_index分组计算后分组依据作为索引

# !分组对象可直接应用聚合函数

xxgrouped.mean() xxgrouped.apply(np.mean) # 聚合函数会对每个分组对象进行计算

指定分组对象使用不同函数

xxgrouped.agg(func)

xxgrouped.agg([func1,fun2,...])

agg( [('求和','sum') ,('平均值','mean'),... ] ) 
# 让函数显示一个别名

agg({列1:['sum','mean','max'], 列2:[('求和','sum'), ('平均值', 'mean')]}) 
# 让 不同的 数列 列 应用不同的 聚合函数

18.分组、apply、透视表

透视表

DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='ALL', ovserved=False)

pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

# values : 透视的数据们
# index=None, 哪些列作为行索引
# columns=None, 哪些列作为 列索引
# aggfunc='mean' 默认求的 均值 ,可以传入 list ,算多个聚合值 ,也可以 dict margins=False ,分项小计
# margins_name='All' ,分项小计显示名称

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值