pandas2

缺失值

None和nan

1.None

  • None是Python自带的,是Python中的空对象。None不能参与到任何计算中。
  • object类型的运算要比int类型的类型慢得多

2.np.nan

  • np.nan是浮点类型,能参与到计算中。但计算结果总是NaN
    但可以使用np.nan*()函数来计算nan,此时会自动过滤掉nan,如np.nansum()

缺失值检测

pandas中None和np.nan都视作np.nan

isnull():判断是否为空,为空显示True,否则显示False
notnull():判断是否不为空,与isnull()相反
all():必须全部为True的行或列,这行或列才会是True,类似and,作用是尽量找到没有空值的行或列。默认是找列,传入axis = 1则可找行。
any():只要有一个为True,这行或列就为True,类似or,作用是尽量找有空的行或列。默认是找列,传入axis = 1则可找行。

过滤

  1. 使用bool值过滤
    先通过isnull()、notnull()、all()、any()得到行或列的bool值,再将bool值传给切片过滤为空的行或列。
  2. 过滤函数dropna()
    默认是删除有nan的行,传入axis=1删除有nan的列。
    默认是how=‘any’,有一个nan就删除,设置为how='all’时必须所有数据都为nan才会删除。
    传入inplace=True时会修改原数据。

填充

填充函数fillna()
传入value = 100可将nan填充为100
传入limit限制填充的次数
传入method='ffill’表示向上填充,将上面的值填充到nan,再传入axis=1表示向左填充,method='backfill’表示向下填充,将下面的值填充到nan,再传入axis=1表示向右填充。

重复值处理

  1. 使用duplicated()函数检测重复的行
    返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True。
    传入keep = 'first’表示保留重复的第一行,即重复的第一行为False(默认)
    传入keep = 'last’表示保留重复的最后一行,即重复的最后一行为False
    传入keep = False表示不保留重复的任何一行,即重复的每一行为True
    传入subset(子集)指定检测的数据,如df.duplicated(subset=[‘A’,‘B’])
  2. 使用drop_duplicates()函数删除重复的行
    默认保留重复的第一行,也可使用keep和subset指定保留哪行和检测哪些数据。

数据映射

replace()函数

对value进行替换操作,如df.replace({5:100,1:50})

map()函数

适合处理某一单独的列,使用map时要先取列。
【注:map一般用在Series数据结构,不能用于DataFrame。】
map函数中可以使用lambda函数,如df[‘A’].map(lambda x : x*10)
map中也可以传入普通函数,先定义普通函数,再将函数名传给map。

rename()函数

替换索引。
默认是修改行索引名,如果要修改列索引名需要传入axis=1

df.rename({‘张三’ : ‘Zhangsan’})
df.rename(index = {‘张三’ : ‘Zhangsan’}) #与上一行一样修改行
df.rename({‘李四’ : ‘lisi’}, axis = 1)
df.rename(columns = {‘李四’ : ‘lisi’}) #与上一行一样修改列

reset_index()和set_index()

reset_index():重置行索引,原来的行索引会变成一列数据。
set_index():设置行索引,将原来的一列数据变成行索引。

df.reset_index()
df.set_index(keys = ‘name’)

apply()函数

用于处理数据,既支持Series,也支持DataFrame。

用于Series,其中x表示Series中的元素。
df[‘A’].apply(lambda x : True if x > 5 else False)

用于DataFrame,其中x是DataFrame中某列或某行的series数据,默认是列。
df.apply(lambda x : x.mean(), axis = 1) #求每一行数据的平均值

也能自定义方法传入apply()中,通过axis改变行列。

applymap():DataFrame专有的方法,其中x是每个元素。
df.applymap(lambda x : x + 100)

transform()函数

Series中使用transform,可以执行多项函数
df[‘A’].transform([np.sqrt, np.exp])

DataFrame中使用transform,默认是对列处理,可设置axis=1对行处理。

pandas异常值处理

  1. df.describe():查看每一列的描述性统计量。
    在这里插入图片描述
  2. df.std():可以求得DataFrame对象每一列的标准量。
  3. df.drop():删除特定索引。

默认是删除行,要删列加axis = 1
df.drop(‘a’)
df.drop(‘A’, axis = 1)

也可以指定行列
df.drop(index = ‘a’)
df.drop(columns = ‘A’)

删除多行多列
df.drop(index = [‘a’, ‘b’])
df.drop(columns = [‘A’, ‘B’])

  1. unique():唯一,去重。
    【注:DataFrame没有unique(),要用Series调用。】

df[‘A’].unique() # 返回的是数组。

  1. df.query():按条件查询
    【注:函数括号里的条件要用引号引起来。】
    在这里插入图片描述
  2. df.sort_values():根据值排序。
    在这里插入图片描述在这里插入图片描述
  3. df.sort_index():根据索引排序。
    在这里插入图片描述
  4. df.info():查看数据信息
    在这里插入图片描述

抽样

  • 使用.take()函数排序
  • 可以借助np.random.permutation()函数随机排序

df.take([1,0,2]) # 默认是按照行索引排序,数字表示索引
df.take([1,0,2], axis = 1) # 按照列排序
随机排序:np.random.permutation([0,1,2])

无放回抽样:依次随机取出,没有重复值
df.take(np.random.permutation([0,1,2]))

有放回抽样:可能会出现重复值
df.take(np.random.randint(0,3,size = 5))

pandas数学函数

在这里插入图片描述
【注:都是默认对列操作,可以用axis = 1改为对行操作。】

对所有元素求和:df.values.sum()
cumsum():每一列中对应第几行就对前面几行求和。cumpord()同理。
df[0].cov(df[1]) 第0列和第1列的协方差
df.corrwith(df[1]) 单一属性相关性系数

pandas数据分组聚合

数据聚合是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值。
数据分类处理:

  • 分组:先把数据分成几组
  • 用函数处理:为不同组的数据应用不同的函数以转换数据
  • 合并:把不同组得到的结果合并起来

数据分类处理的核心:groupby()函数

要按哪列分组就传入参数by指定哪列分组
df.groupby(by = ‘A’) # 得到的是分组后的对象
可使用.groups属性查看各行的分组情况
df.groupby(by = ‘A’).groups()

分组+聚合
df.groupby(‘A’).sum()
分组后求和

pandas加载数据

CSV数据加载

df.to_csv:保存到csv

df.to.csv(‘data.csv’, sep = ‘,’, header = True, index = True)
data.csv:保存到data.csv文件中
sep:分隔符,一般是逗号
header:是否保存列索引
index:是否保存行索引

pd.read_csv:加载csv数据

pd.read_csv(‘data.csv’, sep =‘,', header = [0], index_col = 0)
直接使用pd.read_csv(‘data.csv’)也可以
sep:默认是逗号
header:默认是取数据的第0位作为列索引,也能自己指定,如果传入None则列索引将会变表里的一行数据。
index_col:加载出来的数据默认是会再加上一列行索引,设置为0则是把原来表中的第0列作为行索引。

pd.read_table:和read_csv一样用于加载数据

pd.read_table(‘data.csv’, sep = ‘,’, index_col = 0)
分隔符sep默认是 ”\t“

excel数据加载

df.to_excel:保存到excel文件

df.to_excel(‘data.xlsx’,sheet_name = ‘Sheet1’, header = True, index = True)
sheet_name:工作表名称
header:是否保存列索引
index:是否保存行索引

pd.read_excel:读取excel

pd.read_excel(‘data.xlsx’,sheet_name = ‘Sheet1’, header = [0,1])
header:指定列作为列索引
pd.read_excel(‘data.xlsx’,sheet_name = 0, header = 0,names = list(‘ABCD’))
sheet_name = 0:读取第一个工作表
names:替换原来的列名

pandas分箱操作

分箱操作就是将连续型数据离散化,分箱操作分为等距分箱和等频分箱。

  1. 等距分箱
    在这里插入图片描述在这里插入图片描述
  2. 等频操作
    在这里插入图片描述

时间序列

创建时间戳

创建
pd.Timestamp(‘2030-2-3’) # 时刻数据
pd.Period(‘2030-2-3’, freq = ‘D’) # 时期数据
freq:Y表示精确到年,M表示精确到月,D表示精确到日,默认是D
在这里插入图片描述

批量生成时刻时期数据
periods = 4:创建4个时间
freq = ‘D’:按天为间隔时间,按M时是取这月最后一天,按Y时是取这年最后一天
pd.date_range(‘2030.2.13’, periods = 4, freq = ‘D’) # 时刻数据
pd.period_range(‘2030.2.13’, periods = 4, freq = ‘D’) # 时期数据
在这里插入图片描述

时间戳索引
在这里插入图片描述

时间转换、索引和切片

时间转换
在这里插入图片描述
索引

ts[‘2023-03-15’] # 索引
ts[‘2023-03’] # 3月份
ts[‘2023-3’] # 3月份
ts[‘2023’] # 年
时间戳索引
ts[pd.Timestamp(‘2023-03-15’)]

切片

ts[‘2023-03-15’ : ‘2023-03-22’]
ts[pd.Timestamp(‘2023-03-15’) : pd.Timestamp(‘2023-03-22’)]
ts[pd,date_range(‘2023-03-15’, periods = 10, freq = ‘D’)] # 以天为间隔取从2023-03-15开始的后10天

属性

ts.index # 取到时间
ts.index.year # 取到所有的年份
ts.index.month # 取到所有的月
ts.index.day # 取到所有的日
ts.index.dayofweek # 取得星期几

时间序列常用方法

  1. 移动

ts.shift() # 默认后移1位,指的是值后移一位,没被补位的补NaN
ts.shift(periods = 2) # 后移2位
ts.shift(periods = -2) # 前移2位

  1. 频率转换

ts.asfreq(pd.tseries.offsets.Week()) # 天换为星期
ts.asfreq(pd.tseries.offsets.MonthEnd()) # 天换为月
由少变多:会有大量数据为空,可以用fill_value填充
ts.asfreq(pd.tseries.offsets.Hour(), fill_value = 0) # 天换为小时

重采样resample

resample:根据日期维度进行数据聚合

  • 按照分钟(T)、小时(H)、日(D)、周(W)、月(M)、年(Y)等来作为日期维度

ts.resample(‘2D’).sum() # 以2天为单位进行汇总,求和
ts.resample(‘2W’).sum() # 以2星期为单位进行汇总,求和
ts.resample(‘3M’).sum() # 以3个月为单位进行汇总,求和
ts.resample(‘3M’).sum().cumsum() # 以3个月为单位进行汇总,求和,进行累加
ts.resample(‘H’).sum() # 以1小时为单位进行汇总,求和
ts.resample(‘T’).sum() # 以1分钟为单位进行汇总,求和
ts.resample(‘S’).sum() # 以1秒为单位进行汇总,求和

在这里插入图片描述在这里插入图片描述

时区

使用时区要先导包
tz:timezone时区
import pytz
pytz.common_timezones # 可以查看常用的时区
ts.tz_localize(tz = ‘UTC’) # 时区表示,UTC国际标准时区
ts.tz_convert(tz = ‘Asia/Shanghai’) # 时区转换,将时区转为Shanghai

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值