一、Pandas数据结构
1. Series
1)Series的创建
s = Series(a) # a:列表或NumPy数组或字典
2)Series的属性
s.values # 值
s.index # 索引
3)Series的索引
(1) 显式索引(闭区间):
s[ key ] # 使用index中的元素作为索引值
s.loc[ key ] # 使用index中的元素作为索引值
(2) 隐式索引(半开区间):
s[ n ] # 使用整数作为索引值
s.iloc[ n ] # 使用整数作为索引值
4)Series的切片
(1) 显式切片(闭区间):
s[key: key1]
s.loc[key: key1]
(2) 隐式切片(闭区间):
s[start: end]
s.iloc[start: end]
5)Series的属性和方法
(1) 属性:
s.shape # 形状
s.size # 元素个数
s.index # 索引
s.values # 值
s.dtype # 元素类型
(2) 方法:
head(s) # 查看前几条数据,默认5条
tail(s) # 查看后几条数据,默认5条
pd.isnull(s) # 检查是否为空
pd.notnull(s) # 检查是否为非空
s.isnull() # 检查是否为空
s.notnull() # 检查是否为非空
6)Series的运算
(1) 适用于NumPy的数组运算也适用于Series
s + 100 # 加
s - 100 # 减
s * 100 # 乘
s / 100 # 除
s // 10 # 整除
s ** 2 # 幂
(2) Series之间的运算
s2 + s1 # 加
s2 - s1 # 减
s2 * s1 # 乘
s2 / s1 # 除
s2 // s1 # 整除
s2 ** s1 # 幂
s1.add(s2, fill_value)
2. DataFrame
1)DataFrame的创建
df = DataFrame(d) #d:字典
2) DataFrame属性和方法
values # 值
columns # 列索引
index # 行索引
shape # 形状
head() # 查看前几行数据
tail() # 查看后几行数据
3)DataFrame的索引
(1) 对列进行索引
通过类似字典的方式
通过属性的方式
(2) 对行进行索引
a.loc[ ] # index
a.iloc[ ] # 整数
(3) 对元素索引的方法
使用列索引
使用行索引(iloc[3,1]相当于两个参数;iloc[[3,3]] 里面的[3,3]看做一个参数)
使用values属性(二维numpy数组)
4)DataFrame的切片
# 索引: 优先使用列索引, 先取行就需要写loc或iloc
# 切片: 优先按行切片, 和Numpy操作类似
5)DataFrame的运算
(1) DataFrame之间的运算
df1 + 100 # DataFrame和数的运算
df1 + df2 # DataFrame之间的运算
df1.add(df2, fill_value) # 自动填充, 再相加
(2)Series与DataFrame之间的运算
df1 + s # 直接相加
df1.add(s, axis) # 使用add函数
二、Pandas层次化索引
1. 创建多层行索引
1) 隐式构造
index参数传递两个或更多的数组
Series也可以创建多层索引
2) 显示构造
pd.MultiIndex.from_arrays(array)
pd.MultiIndex.from_tuples(tuple)
pd.MultiIndex.from_product(product)
2. 创建多层列索引(同行索引)
除了行索引index,列索引columns也能用同样的方法创建多层索引
3. 多层索引对象的索引与切片操作
1)Series的操作
s['1班'] # 显式索引
s.loc['1班'] # 显式索引
s[1] # 隐式索引
s.iloc[1] # 隐式索引
s['1班': '1班'] # 显式切片
s.loc['1班': '2班'] # 显式切片
s[1: 4] # 隐式切片
s.iloc[1: 5] # 隐式切片
2)DataFrame的操作
df['期中']# 列索引
df.loc['1班'] # 行索引
df.iloc[1:5]# 行切片
df.iloc[:, 1: 5]# 列切片
4. 索引的堆叠
df.stack(level,fill_value)
df.unstack(level,fill_value)
5. 聚合操作
df.sum(axis, level) # 求和
df.average(axis, level) # 平均值
df.max(axis, level) # 最大值
df.min(axis, level) # 最小值
三、Pandas数据合并
1. 使用pd.concat()级联
(1) 简单级联
pd.concat([df1, df2]) # 上下合并,垂直合并
pd.concat([df1, df2], axis=1) # 左右合并,水平合并
pd.concat([df1, df2], ignore_index=True) # 忽略行索引,重置行索引
pd.concat([df1, df2], keys=['x', 'y']) # 使用多层索引 keys
(2) 不匹配级联
pd.concat([df3, df4]) # 对应索引没有值的会自动用NaN填充
pd.concat([df3, df4], join='outer') # 外连接:补NaN(默认模式), 默认 值 outer, 类似并集, 所有数据都会显示
pd.concat([df3, df4], join='inner')# 内连接:只连接匹配的项, 交集, 只显示共同的 列行
2. 使用append()函数添加
df3.append(df4, sort)
3.使用merge()合并
1) 合并
df1.merge(df2)
2) key的规范化
df1.merge(df2, on)
df1.merge(df2, left_on, right_on)
3) 内合并与外合并
df1.merge(df2, how)
4) 添加后缀
df1.merge(df2, on, suffixes)
四、Pandas缺失值处理
1. 判断函数:
df.isnull().any(axis) # 常用, 尽可能找到所有的空值
df.notnull().all(axis) # 常用,尽可能找到所有的空值
2. 过滤函数
df.dropna() # 默认是删除有空的行
df.dropna(axis=1) # 删除有空的列
df.dropna(how='any') # 默认值,默认有空就会删除
df.dropna(how='all', axis=1) # 所有的值都为空(整行或整列为空),才删除
df2.dropna(inplace=True) # inplace=True: 表式修改原数据
3. 填充函数 Series/DataFrame
df.fillna(value=100)# 填充
df2.fillna(value=100, limit=1, inplace=True)# limit: 限制对应维度上填充的次数
df.fillna(method='ffill') # 用上面数据来填充自己
df.fillna(method='bfill') # 用下面数据来填充自己
df.fillna(method='ffill', axis=1) # 用左边数据来填充自己
df.fillna(method='bfill', axis=1) # 用右边数据来填充自己
五、Pandas处理重复值和异常值
1. 删除重复行
df.duplicated(keep='first') # 保留第一行
df.duplicated(keep='last') # 保留最后一行
df.duplicated(keep=False) # 标记所有重复行
2. 映射
1) replace()函数:替换元素
2) map()函数: 适合处理某一单独的列
3) rename()函数:替换索引
4) apply()函数:既支持 Series,也支持 DataFrame
5) transform()函数
3. 异常值检测和过滤
describe(): 查看每一列的描述性统计量
df.std() : 可以求得DataFrame对象每一列的标准差
df.drop(): 删除特定索引
unique() : 唯一,去重
query() : 按条件查询
df.sort_values(): 根据值排序
df.sort_index(): 根据索引排序
df.info(): 查看数据信息
4. 抽样
使用.take()函数排序
可以借助np.random.permutation()函数随机排序
六、Pandas数学函数
1. 聚合函数
df.count() # 非空值的数量
df.max() # 最大值,axis=0/1
df.min() # 最小值, axis=0/1
df.median() # 中位数
df.sum() # 求和
df.mean(axis=1) # 每一行的平均值
df[0].value_counts() # 统计元素出现次数
df.cumsum() # 累加
df.cumprod() # 累乘
df.var() # 方差
df.std() # 标准差
2. 其他数学函数
df.cov() # 协方差
df.corr() # 所有属性相关性系数
df.corrwith(df[2]) # 单一属性相关性系数
七、 数据分组聚合
df.groupby(by='color') # 使用.groups属性查看各行的分组情况:
df.groupby(by='color').groups # 根据color进行分组
df.groupby(by='color').sum() # 分组 + 聚合
八、Pandas加载数据
1.CSV数据
df.to_csv('data.csv',sep header, index)# 保存到csv
pd.read_csv('data.csv',sep,header,index_col) # 加载csv数据
pd.read_table('data.csv', sep,header,index_col) # 加载csv数据
2.excel数据
df.to_excel('data.xls',sheet_name,header,index)# 保存到excel文件
pd.read_excel('data.xls',sheet_name,header,names,index_col)# 读取excel
3.MySQL数据
df.to_sql('score', conn,index,if_exists) # 保存到MySQL
pd.read_sql('select * from score',conn,index_col) # 从MySQL中加载数据
九、Pandas分箱操作
df.Python.values # 对Python列进行分箱
pd.cut(df.Python, bins) # 等宽分箱
pd.cut(df.Python,bins,right,labels) # 指定宽度分箱
pd.qcut(df.Python,q,labels) # 等频分箱
十、Pandas绘图
1. 折线图
s.plot()
2. 条形图/柱形图
s.plot(kind='barh') # 条形图
s.plot(kind='bar') # 柱状图
3. 饼图
df.plot.pie(subplots, figsize, autopct)
4. 散点图
df.plot(kind='scatter', x='A', y='B') # scatter: 散点图
df.plot.scatter(x='A', y='B') # A和B关系绘制
5. 面积图
df.plot.area(stacked) # stacked 是否堆叠
6. 箱型图
df.plot.box()
df.plot(kind='box')
7. 直方图
df.plot.hist(alpha) # 带透明度直方图
df.plot.hist(stacked) # 堆叠图
df['A'].plot(kind='hist')
df.plot(kind='hist')
标签:index,函数,df,Series,汇总,DataFrame,索引,pd,Pandas From: https://blog.csdn.net/qq_41600393/article/details/140158755