主要内容:
import pandas as pd from pandas import Series, DataFrame import numpy as np
1 Series是一种类似与一维数组的对象,由下面两个部分组成:values:一种数据类型;index:相应的数据索引标签.Series的创建
a :两种创建 方式
1) 由列表和numpy数组组建,默认索引为0.
Series(data=[1,2,3,4], index=['ds','dsa','re','gr'], name='haha') # 使用numpy创建Series Series(data=np.arange(10,60,6))
2) 由字典创建: 不能再使用index, 但是依然存在默认索引. 注意: 数据源必须为一维数据
dic = { 'math':100, 'english':50 } Series(data=dic, name='qimo')
b: Series的索引和切片
1) 显示索引:使用index中的元素作为索引值 使用s.loc: 注意loc中括号中放置的一定是显示索引
2) 隐式索引: 使用整数作为索引值.使用s.iloc[]
s = Series(np.random.randint(60,100, size=(5,)), index=['a','b','c','d','e'] ) s.loc['a'] s.iloc[1] s.iloc[[1,2,3]]
3 显示索引切片和隐式索引切片: s.loc['a':'c']
4) Series的基本概念
可以把Series看成一个定长的有序字典 向series增加一行: 相当于给字典增加一组键值对;
s['g'] = 100 s
可以通过shape,size, index, values等得到series的属性
s.index s.values
可以使用s.head(), tail分别查看前几个和后几个值
s.head(3) s.tail(3)
对Series元素进行去重
# 对Series元素进行去重 s = Series(data=[1,1,2,2,3,3,4,4,4,5,6,7,8,7,7,66,43,342,6665,444,333,444]) s.unique() #Series中的去重函数
空值检测过滤.可以使用pd.isnull(), pd.notnull(), 或s.isnull()
s1 = Series(data=[1,2,3,4,5],index=['a','b','c','d','e']) s2 = Series(data=[1,2,3,4,5],index=['a','b','c','f','g']) s = s1+s2 s# 有空值 #进行空值过滤 s.loc[s.notnull()]
5) Series运算
在运算中自动补齐不同索引的数据
如果索引不对应,则补nan
2 DataFrame
a : DataFrame的概念
DataFrame是一个表格型的数据结构, 其由按一定顺序排列的多列数据组成.设计初衷是由Series的使用场景从一维拓展到多维. DataFrame既有行索引也有列索引 . index行索引, columns列索引, values值
b : DataFrame的创建
最常用的方法是传递一个字典来创建.DataFrame以字典的键作为每一列的名称,以字典的值(一个数组)作为每一列
dic = { 'java':[60,70,80], 'python':[100,100,100] } DataFrame(data=dic, index=['zhangsan','lisi','wangwu'])
t
df = DataFrame(data=np.random.randint(60,100,size=(3,3)),index=['a','b','c'],columns=['A','B','C'])
c : DataFrame索引
对列进行索引,通过类似字典的方式df['q'] 通过属性的方式 df.q 可以将DataFrame的列获取为一个series,返回的series拥有原DataFrame相同的索引,且name属性也已经设置哈, 就是相应的列名.
df = DataFrame(data=np.random.randint(60,150,size=(4,2)),index=['chinese','math','english','lizong'],columns=['zhangsan','li']) df # 对列进行索引 df['li'] df[['zhangsan','li']] # 对行进行索引 -使用.loc[]加index进行索引 -使用.iloc[]加整数来进行索引 # 同样返回一个series,index为原来的column
# 对前两行求索引
df.iloc[[0,1]]
d : 切片
直接用中括号时: 索引表示的是列索引, 切片表示的是行切片
df = DataFrame(data=np.random.randint(60,150,size=(4,2)),index=['chinese','math','english','lizong'],columns=['zhangsan','li']) df df['math':'lizong']
在loc和iloc中使用切片(切列): df.loc[:, 'zhangsan':'li']
e : DataFrame的运算
df1=df.copy() df.index=['math','lizong','a','b'] df1 df1.zhangsan.loc['math']=0 df1.loc['math','zhangsan']=1
f 创建多层索引
隐式构造: 最常见的方法就是给DataFrame构造函数的index或者columns参数传递两个或者更多的数组.
# 创建了一个索引对象,该索引对象为二层索引 df = DataFrame(np.random.randint(60,100,size=(2,4)),index=['tom','jay'],columns=[['qizhong','qimo','qizhong','qimo'],['chinese','math','chinese','math']]) df
显示构造: pd.MultIndex.from_
col = pd.MultiIndex.from_product([['qizhong','qimo'],['chinese','math']]) df = DataFrame(data=np.random.randint(60,120,size=(2,4)),columns=col, index=['tom','joy']) df
h 处理空值,处理丢失数据
有两种丢失数据: None和np.NaN
1 None None是Python自带的, 其类型为python object.因此,None不能参与到任何运算中. 2 np.nan np.nan是浮点类型,能参与到运算中.但计算的结果总是nan
np.random.seed(10) df=DataFrame(np.random.randint(50,200,size=(6,5)), index=['a','d','f','g','t','j'],columns=['D','R','G','E','M']) df # 将某些数组元素赋值为nan df.iloc[1,3]=None df.iloc[2,2]=np.nan df.iloc[4,2]=None df #处理空值 df.loc[df.notnull().all(axis=1)]
过滤df中的空值(只保留没有空值的行)
df.dropna()可以选择过滤的是行还是列: axis=0默认是行,1表示的是列
df.drop() 通过label指定要删除的行或者列
df.fillna() 填充函数
np.random.seed(10) df=DataFrame(np.random.randint(50,200,size=(6,5)), index=['a','d','f','g','t','j'],columns=['D','R','G','E','M']) df # drpna函数过滤空值 df.dropna(axis=0, inplace=True) df # drop函数去除指定的列 df.drop(labels='D', axis=1) #填充函数: fillna(): value和method参数 df.fillna(method='bfill',axis=0,limit=1) 可以选择向前填充或者向后填充 method控制填充的方式 bfill ffill
l pandas的拼接操作: 见数据分析第一天
pandas的拼接分两种: 级联: pd.concat, pd.append 合并: pd.merge, pd.join