python:Pandas速查手册

  1. Pandas的对象:Series和DataFrame
  2. DataFrame:二维表,若个给有序排列的Series对象;Series:带索引数据的一维数组,可以从数组和字典中创建
  3. DataFrame的创建方式:
    1. 由series创建:pd.DataFrame(population, columns=[‘population’])
    2. 通过字典列表创建。任何元素是字典的列表都可以变成 DataFrame,K为表头
    3. 通过 Series 对象字典创建。 DataFrame 也可以用一个由 Series对象构成的字典创建
      如:pd.DataFrame({'population': population,'area': area}) pop和area是Series对象
    4. 由二维数组创建:
pd.DataFrame(np.random.rand(3, 2),columns=['foo', 'bar'],index=['a', 'b', 'c']) 
  1. pandas的取值和选择:
    1. series:把series当成字典,通过索引取值;将series看作一维数组,进行索引,掩码;索引器:loc,iloc和ix
    2. DataFrame:当初字典形式进行属性选择;二维数组形式进行索引;索引器:loc,iloc和ix.
  2. loc,iloc和ix
    1. loc:通过**行标签(index)**索引行数据 属于显示索引 如:data[:‘pop’]
    2. iloc:通过行号索引行数据 属于隐式索引 如:data.[:3]
    3. ix:上述两种的混合形式如:data.ix[:3, :‘pop’]
  3. 索引对齐:当对pd对象进行二元计算时,pd会自动对齐两个对象的索引,如处理不完整数据时,对于缺失位置的数据,pd会用NaN填充。
    如:
A = pd.Series([2, 4, 6], index=[0, 1, 2])
B = pd.Series([1, 3, 5], index=[1, 2, 3])
A + B 

out:在这里插入图片描述
解决办法:通过使用与python运算符相对应的Pandas对象方法,并在fill_value 参数中自定义缺失值,如

fill = A.stack().mean()
A.add(B, fill_value=fill) 

在这里插入图片描述

  1. 处理缺失值:None、 NaN 或 NA。
    1. isnull() :创建一个布尔类型的掩码标签缺失值
    2. notnull() :与 isnull() 操作相反
    3. dropna() :返回一个剔除缺失值的数据 (默认情况下, dropna() 会剔除任何包含缺失值的整行数据,可以设置不同坐标轴(axis)剔除相关维度数据,也可以通过设置 how 或 thresh 参数来满足,它们可以设置剔除行或列缺失值的数量阈值,如设置 how=‘all’,这样就只会剔除全部是缺失值的行或列,how=‘any’:只要有缺失值就剔除整行或整列 )
    4. fillna():返回一个填充了缺失值的数据副本,可以指定填充内容或者填充方式
#填充0
data.fillna(0) 
# 用缺失值前面的有效值来从前往后填充 forward-fill 
data.fillna(method='ffill') 
# 用缺失值后面的有效值从后往前填充 back-fill 
data.fillna(method='bfill') 
  1. 多级索引
#用元组来表示索引 创建series
index = [('California', 2000), ('California', 2010),('New York', 2000), ('New York', 2010),('Texas', 2000), ('Texas', 2010)]
populations = [33871648, 37253956,18976457, 19378102,20851820, 25145561]
pop = pd.Series(populations, index=index)

out:
在这里插入图片描述

  1. 方法一:不推荐
#查找2020年的数据
pop1=pop[[i for i in pop.index if i[1] == 2010]]
#切片索引
pop[('California', 2010):('Texas', 2000)] 
  1. 方法二:pd多级索引:MultiIndex
#MultiIndex 里面有一个 levels 属性表示索引的等级 ,可以将元组的index化成不同标签
index = pd.MultiIndex.from_tuples(index) 
#索引重置(reindex)为 MultiIndex,就会看到层级索引 
pop = pop.reindex(index) 

out:前面两列是索引,第三列开始是数据

在这里插入图片描述
用第二个索引获取 2010 年的全部数据

pop[:, 2010] 

转换成行列索引的DF:unstack() 和反效果:stack()
并提供level设置层级层次

pop_df = pop.unstack() 
pop_df.stack() 

在这里插入图片描述
直接创建多级索引:

df = pd.DataFrame(np.random.rand(4, 2),
index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
columns=['data1', 'data2']) 

设置多级索引名称:

pop.index.names = ['state', 'year'] 

多级列索引:

# 多级行列索引
index = pd.MultiIndex.from_product([[2013, 2014], [1, 2]],
names=['year', 'visit'])
columns = pd.MultiIndex.from_product([['Bob', 'Guido', 'Sue'], ['HR', 'Temp']],
names=['subject', 'type'])
# 模拟数据
data = np.round(np.random.randn(4, 6), 1)
data[:, ::2] *= 10
data += 37
# 创建DataFrame
health_data = pd.DataFrame(data, index=index, columns=columns) 

在这里插入图片描述
多级索引的数据累计方法:mean()、 sum() 和 max() 等,可以设置参数 level 实现对数据子集的累计操作
如:

data_mean = health_data.mean(level='year') 
data_mean.mean(axis=1, level='type') 
  1. 合并数据集 :Concat、Append
    1. Numpy数组的合并:合并DF和合并Numpy数组基本相同,使用np.concatenate 函数即可完成,可以用这个函数将两个或两个以上的数组合并成一个数组,设置axis参数设置合并维度。
    2. pd.concat() 函数 进行Series和DF对象的合并,默认axis=0进行逐行合并:
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True) 

注意:

  • pd.conca在合并时会保留索引,即使索引是重复的,可以通过设置ignore_index=True参数来忽略索引;或者通过key参数为数据源设置多级索引标签

  • pd.concat是类似join的合并,合并方式是对所有输入列进行并集合并(join=‘outer’),如果合并的列名不同,会在缺失位置用NaN表示,也可以用 join=‘inner’ 实现对输入列的交集合并

  • 可以通过join_axes参数,指定结果使用的列名。

    1. append()方法,df1.append(df2)
  1. 数据集的连接:pd.merge 函数 它会将两个输入的一个或多个共同列作为键进行合并,实现一对一,一对多,多对多连接。
    1. 参数on:由于两个输入要合并的列通常都不是同名的 ,可以直接将参数 on 设置为一个列名字符串或者一个包含多列名称的列表
    2. left_on 和 right_on 参数 :合并两个列名不同的数据集,例如员工信息表是“name”,而工资表是"employee"
    3. 合并索引:设置 pd.merge() 中的 left_index 和 / 或 right_index 参数将索引设置为键来实现合并 ;(DataFrame也实现了join方法,按照索引进行数据合并)
    4. how属性:设置数据连接方式:默认为inner内连接;还有 ‘outer’、 ‘left’ 和 ‘right’
    5. suffixes参数:当有重复的列名时,pd.merge() 函数会自动为它们增加后缀 _x 或 _y,当然也可以通过 suffixes 参数自定义后缀名
pd.merge(df1, df3, left_on="employee", right_on="name") 
# 合并索引
pd.merge(df1a, df2a, left_index=True, right_index=True)
  1. pd累计方法:
指标描述
count()计数项
first()、 last()第一项与最后一项
mean()、 median()均值与中位数
std()、 var()标准差与方差
mad()均值绝对偏差
prod()所有项乘积
sum()所有项求和
GroupBy()分割应用、组合
apply()在分组的基础上应用方法

(GroupBy 中最重要的操作可能就是 aggregate、 filter、 transform 和 apply 累计、过滤、转换、应用) )

  1. pd向量化字符串操作
    向量化操作简化了纯数值的数组操作语法——我们不需要再担心数组的长度或维度,只需要关心需要的操作。然而,由于 NumPy 并没有为字符串数组提供简单的接口,因此需要通过繁琐的 for 循环来解决问题,虽然这么做对于某些数据可能是有效的,但是假如数据中出现了缺失值,那么这样做就会引起异常;
    Pandas 为包含字符串的 Series 和 Index 对象提供的 str 属性堪称两全其美的方法,它既可以满足向量化字符串操作的需求,又可以正确地处理缺失值
    如:
#对series里面的内容(含有null)调用capitalize() 将所有的字符串变成大写形式,缺失值会被跳过 
names.str.capitalize() 

Pandas 的 str 方法借鉴 Python 字符串方法的内容:

len() lower() translate() islower()
ljust() upper() startswith() isupper()
rjust() find() endswith() isnumeric()
center() rfind() isalnum() isdecimal()
zfill() index() isalpha() split()
strip() rindex() isdigit() rsplit()
rstrip() capitalize() isspace() partition()
lstrip() swapcase() istitle() rpartition() 
get() #获取元素索引位置上的值,索引从 0 开始
slice() #对元素进行切片取值
slice_replace() #对元素进行切片替换
cat() #连接字符串(此功能比较复杂,建议阅读文档)
repeat() #重复元素
normalize() #将字符串转换为 Unicode 规范形式
pad() #在字符串的左边、右边或两边增加空格
wrap() #将字符串按照指定的宽度换行
join() #用分隔符连接 Series 的每个元素
get_dummies() #按照分隔符提取每个元素的 dummy 变量,转换为独热(one-hot)编码的 DataFrame 

使用正则的方法:

match() #对每个元素调用 re.match(),返回布尔类型值
extract() #对每个元素调用 re.match(),返回匹配的字符串组(groups)
findall() #对每个元素调用 re.findall()
replace() #正则模式替换字符串
contains() #对每个元素调用 re.search(),返回布尔类型值
count() #计算符合正则模式的字符串的数量
split() #等价于 str.split(),支持正则表达式
rsplit() #等价于 str.rsplit(),支持正则表达式 
  1. 时间序列处理
    Pandas 所有关于日期与时间的处理方法全部都是通过 Timestamp 对象实现的,Pandas 通过一组 Timestamp 对象就可以创建一个可以作为 Series 或 DataFrame 索引DatetimeIndex
    (关于原生Python的datetime和datenutl ,numpy的datatime64见python数据科学手册)
    1. 针对时间戳数据, Pandas 提供了 Timestamp 类型
    2. 针对时间周期数据, Pandas 提供了 Period 类型
    3. 针对时间增量或持续时间, Pandas 提供了 Timedelta 类型
date = pd.to_datetime("4th of July, 2015") 
Out[9]: Timestamp('2015-07-04 00:00:00') 
date.strftime('%A') 
Out[10]: 'Saturday' 

index = pd.DatetimeIndex(['2014-07-04', '2014-08-04','2015-07-04', '2015-08-04'])
data = pd.Series([0, 1, 2, 3], index=index) 
Out[11]: 2014-07-04 0
		2014-08-04 1
		2015-07-04 2
		2015-08-04 3 
	
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值