任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~

一、索引

Series和DataFrame都是有索引的,索引的好处是快速定位,在涉及到两个Series或DataFrame时可以根据索引自动对齐,比如日期自动对齐,这样可以省去很多事。

缺失值

pd.isnull(obj)
obj.isnull()

将字典转成数据框,并赋予列名,索引

DataFrame(data, columns=['col1','col2','col3'...],index = ['i1','i2','i3'...])

查看列名

DataFrame.columns

查看索引

DataFrame.index

重建索引

obj.reindex(['a','b','c','d','e'...], fill_value=0]
#按给出的索引顺序重新排序,而不是替换索引。如果索引没有值,就用0填充#就地修改索引
data.index=data.index.map(str.upper)

列顺序重排(也是重建索引)

DataFrame.reindex[columns=['col1','col2','col3'...])`#也可以同时重建index和columnsDataFrame.reindex[index=['a','b','c'...],columns=['col1','col2','col3'...])

重建索引的快捷键

DataFrame.ix[['a','b','c'...],['col1','col2','col3'...]]

重命名轴索引

data.rename(index=str.title,columns=str.upper)#修改某个索引和列名,可以通过传入字典
data.rename(index={'old_index':'new_index'},columns={'old_col':'new_col'})

查看某一列

DataFrame['state'] 或 DataFrame.state

查看某一行

需要用到索引

DataFrame.ix['index_name']

添加或删除一列

DataFrame['new_col_name'] = 'char_or_number'
#删除行
DataFrame.drop(['index1','index2'...])
#删除列
DataFrame.drop(['col1','col2'...],axis=1)
#或
del DataFrame['col1']

DataFrame选择子集

类型 说明
obj[val] 选择一列或多列
obj.ix[val] 选择一行或多行
obj.ix[:,val] 选择一列或多列
obj.ix[val1,val2] 同时选择行和列
reindx 对行和列重新索引
icol,irow 根据整数位置选取单列或单行
get_value,set_value 根据行标签和列标签选择单个值

针对series

obj[['a','b','c'...]]
obj['b':'e']=5

针对dataframe

#选择多列
dataframe[['col1','col2'...]]#选择多行
dataframe[m:n]#条件筛选
dataframe[dataframe['col3'>5]]#选择子集
dataframe.ix[0:3,0:5]

dataframe和series的运算

会根据 index 和 columns 自动对齐然后进行运算,很方便啊

方法 说明
add 加法
sub 减法
div 除法
mul 乘法
#没有数据的地方用0填充空值
df1.add(df2,fill_value=0)# dataframe 与 series 的运算
dataframe - series
规则是:
--------   --------  |
|      |   |      |  |
|      |   --------  |
|      |             |
|      |             v
--------
#指定轴方向
dataframe.sub(series,axis=0)
规则是:
--------   ---
|      |   | |   ----->
|      |   | |
|      |   | |
|      |   | |
--------   ---

apply函数

f=lambda x:x.max()-x.min()#默认对每一列应用
dataframe.apply(f)#如果需要对每一行分组应用
dataframe.apply(f,axis=1)

排序和排名

#默认根据index排序,axis = 1 则根据columns排序
dataframe.sort_index(axis=0, ascending=False)# 根据值排序
dataframe.sort_index(by=['col1','col2'...])#排名,给出的是rank值series.rank(ascending=False)
#如果出现重复值,则取平均秩次#在行或列上面的排名
dataframe.rank(axis=0)

描述性统计

方法 说明
count 计数
describe 给出各列的常用统计量
min,max 最大最小值
argmin,argmax 最大最小值的索引位置(整数)
idxmin,idxmax 最大最小值的索引值
quantile 计算样本分位数
sum,mean 对列求和,均值
mediam 中位数
mad 根据平均值计算平均绝对离差
var,std 方差,标准差
skew 偏度(三阶矩)
Kurt 峰度(四阶矩)
cumsum 累积和
Cummins,cummax 累计组大致和累计最小值
cumprod 累计积
diff 一阶差分
pct_change 计算百分数变化

唯一值,值计数,成员资格

obj.unique()
obj.value_count()
obj.isin(['b','c'])

处理缺失值

# 过滤缺失值# 只要有缺失值就丢弃这一行
dataframe.dropna()
#要求全部为缺失才丢弃这一行
dataframe.dropna(how='all')
# 根据列来判断
dataframe.dropna(how='all',axis=1)# 填充缺失值#1.用0填充
df.fillna(0)#2.不同的列用不同的值填充
df.fillna({1:0.5, 3:-1})#3.用均值填充
df.fillna(df.mean())# 此时axis参数同前面

二、Groupby

pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数。对DataFrame的列应用各种各样的函数。应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等。计算透视表或交叉表。执行分位数分析以及其他分组分析。

1)查看DataFrame数据及属性

df_obj = DataFrame() #创建DataFrame对象
df_obj.dtypes #查看各行的数据格式
df_obj['列名'].astype(int)#转换某列的数据类型
df_obj.head() #查看前几行的数据,默认前5行
df_obj.tail() #查看后几行的数据,默认后5行
df_obj.index #查看索引
df_obj.columns #查看列名
df_obj.values #查看数据值
df_obj.describe() #描述性统计
df_obj.T #转置
df_obj.sort_values(by=['',''])#同上

2)使用DataFrame选择数据:

df_obj.ix[1:3] #获取1-3行的数据,该操作叫切片操作,获取行数据
df_obj.ix[columns_index] #获取列的数据
df_obj.ix[1:3,[1,3]]#获取1列3列的1~3行数据
df_obj[columns].drop_duplicates() #剔除重复行数据

3)使用DataFrame重置数据:

df_obj.ix[1:3,[1,3]]=1#所选位置数据替换为1

4)使用DataFrame筛选数据(类似SQL中的WHERE):

alist = ['023-18996609823']
df_obj['用户号码'].isin(alist) #将要过滤的数据放入字典中,使用isin对数据进行筛选,返回行索引以及每行筛选的结果,若匹配则返回ture
df_obj[df_obj['用户号码'].isin(alist)] #获取匹配结果为ture的行

5)使用DataFrame模糊筛选数据(类似SQL中的LIKE):

df_obj[df_obj['套餐'].str.contains(r'.*?语音CDMA.*')] #使用正则表达式进行模糊匹配,*匹配0或无限次,?匹配0或1次

6)使用DataFrame进行数据转换(后期补充说明)

df_obj['支局_维护线'] = df_obj['支局_维护线'].str.replace('巫溪分公司(.{2,})支局','\\1')#可以使用正则表达式

可以设置take_last=ture 保留最后一个,或保留开始一个.补充说明:注意take_last=ture已过时,请使用keep=’last’

7)使用pandas中读取数据:

read_csv('D:\LQJ.csv',sep=';',nrows=2) #首先输入csv文本地址,然后分割符选择等等
df.to_excel('foo.xlsx',sheet_name='Sheet1');pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])#写入读取excel数据,pd.read_excel读取的数据是以DataFrame形式存储
df.to_hdf('foo.h5','df');pd.read_hdf('foo.h5','df')#写入读取HDF5数据

8)使用pandas聚合数据(类似SQL中的GROUP BY 或HAVING):

data_obj['用户标识'].groupby(data_obj['支局_维护线'])
data_obj.groupby('支局_维护线')['用户标识'] #上面的简单写法
adsl_obj.groupby('支局_维护线')['用户标识'].agg([('ADSL','count')])#按支局进行汇总对用户标识进行计数,并将计数列的列名命名为ADSL

9)使用pandas合并数据集(类似SQL中的JOIN):

merge(mxj_obj2, mxj_obj1 ,on='用户标识',how='inner')# mxj_obj1和mxj_obj2将用户标识当成重叠列的键合并两个数据集,inner表示取两个数据集的交集.

10)清理数据

df[df.isnull()]
df[df.notnull()]
df.dropna()#将所有含有nan项的row删除
df.dropna(axis=1,thresh=3) #将在列的方向上三个为NaN的项删除
df.dropna(how='ALL')#将全部项都是nan的row删除填充值
df.fillna(0)
df.fillna({1:0,2:0.5}) #对第一列nan值赋0,第二列赋值0.5
df.fillna(method='ffill') #在列方向上以前一个值作为值赋给NaN

实例

1. 读取excel数据 
代码如下

import pandas as pd# 读取高炉数据,注意文件名不能为中文
data=pd.read_excel('gaolushuju_201501-03.xlsx', '201501', index_col=None, na_values=['NA'])
print data

测试结果如下

      燃料比  顶温西南  顶温西北  顶温东南  顶温东北
0   531.46   185   176   176   174
1   510.35   184   173   184   188
2   533.49   180   165   182   177
3   511.51   190   172   179   188
4   531.02   180   167   173   180
5   511.24   174   164   178   176
6   532.62   173   170   168   179
7   583.00   182   175   176   173
8   530.70   158   149   159   156
9   530.32   168   156   169   171
10  528.62   164   150   171   169

2. 切片处理,选取行或列,修改数据 
代码如下:

data_1row=data.ix[1]
data_5row_2col=data.ix[0:5,[u'燃料比',u'顶温西南']
print data_1row,data_5row_2col
data_5row_2col.ix[0:1,0:2]=3

测试结果如下:

燃料比     510.35
顶温西南    184.00
顶温西北    173.00
顶温东南    184.00
顶温东北    188.00
Name: 1, dtype: float64    燃料比  顶温西南
0  531.46   185
1  510.35   184
2  533.49   180
3  511.51   190
4  531.02   180
5  511.24   174燃料比  顶温西南
0    3.00     3
1    3.00     3
2  533.49   180
3  511.51   190
4  531.02   180
5  511.24   174

格式说明,data_5row_2col.ix[0:1,0:2],data_5row_2col.ix[0:1,[0,2]],选取部分行和列需加”[]” 
3. 排序 
代码如下:

print data_1row.sort_values()
print data_5row_2col.sort_values(by=u'燃料比')

测试结果如下:

顶温西北    173.00
顶温西南    184.00
顶温东南    184.00
顶温东北    188.00
燃料比     510.35
Name: 1, dtype: float64燃料比  顶温西南
1  510.35   184
5  511.24   174
3  511.51   190
4  531.02   180
0  531.46   185
2  533.49   180

4. 删除重复的行 
代码如下:

print data_5row_2col[u'顶温西南'].drop_duplicates()#剔除重复行数据

测试结果如下:

0    185
1    184
2    180
3    190
5    174
Name: 顶温西南, dtype: int64
  • 说明:从测试结果3中可以看出顶温西南index=2的数据与index=4的数据重复,测试结果4显示将index=4的顶温西南数据删除

5. 参考文献 
10分钟搞定pandas 
numpy+pandas series dataframe常用函数 
python基础教程

Python数据分析:pandas中Dataframe的groupby与索引相关推荐

  1. Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件、zip压缩文件

    Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件.zip压缩文件 目录 Python将Pandas中Dataframe数据保存为gzip/zip文件:gz ...

  2. Python数据分析pandas之dataframe初识

    Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...

  3. python column stack_Python基础 | pandas中dataframe的整合与形变(merge reshape)

    [toc] 本文示例数据下载,密码:vwy3 import pandas as pd # 数据是之前在cnblog上抓取的部分文章信息 df = pd.read_csv('./data/SQL测试用数 ...

  4. Pandas中DataFrame基本函数整理(全)

    [python]Pandas中DataFrame基本函数整理(全) 构造函数 DataFrame([data, index, columns, dtype, copy]) #构造数据框 属性和数据 D ...

  5. python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数

    python使用pandas计算dataframe中每个分组的分位数极差.分组数据的分位数极差(range).使用groupby函数和agg函数计算分组的两个分位数 目录

  6. python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值

    python使用pandas计算dataframe中每个分组的极差.分组数据的极差(range).使用groupby函数和agg函数计算分组的最大值和最小值 目录

  7. Python—pandas中DataFrame类型数据操作函数

    python数据分析工具pandas中DataFrame和Series作为主要的数据结构.  本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数.  1)查看DataFram ...

  8. python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法

    python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  9. python科学计算笔记(九)pandas中DataFrame数据操作函数

    Python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  10. python dataframe函数_python pandas中DataFrame类型数据操作函数的方法

    这篇文章主要介绍了关于python pandas中DataFrame类型数据操作函数的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python数据分析工具pandas中Data ...

最新文章

  1. 安装php出现php-cgi error 1
  2. 7个IntelliJ IDEA必备插件,让写代码像火箭一样飞起!
  3. 云从科技上交大提出DCMN+ 模型,在多项阅读理解数据集上成绩领先
  4. java发红包课程设计_JAVA 实现简单的发红包案例
  5. 定义100学生C语言,C语言考试试题:定义一个100位学生的结构体数组,按成绩从高到低进行排序...
  6. superset可视化-桑基图(sankey diagram)
  7. java处理超大csv文件_比较 csv 文件中数据差异
  8. vue ---- 监听器
  9. Linux:VMware Tools安装方法及共享文件夹设置方法
  10. python编程 书籍_Python编程十大最佳书籍
  11. 如何快速学习一门技术?十步学习法
  12. 中外十大武侠片排行榜
  13. 如何做gif动图?手把手教你在线制作动图
  14. 【软开云】基于华为软开云用敏捷思想管理项目团队一点思路(2)
  15. kubernetes故障现场一之Orphaned pod
  16. Apache原理详解
  17. 程序员必备屏幕录制神器(GifCam)
  18. java转大数据的学习路线
  19. ghost系统后只有一个盘了别的分区的数据怎样恢复
  20. 让我摘下星星送给你_抖音摘下星星给你是什么歌_抖音想摘下星星给你歌名是什么_好特教程...

热门文章

  1. mysql 数据表中查找重复记录(条数)
  2. 使用 jQuery 和 KnockoutJS 开发在线股票走势图应用
  3. (LINQ 学习系列)(3)学习Linq的几个基础知识
  4. sicily 1002. Anti-prime Sequences
  5. 本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容
  6. javascript模拟抽奖
  7. datatable 参数详细说明
  8. golang笔记(1)-数据库查询结果映射至结构体
  9. Vue2学习笔记:计算属性(computed)
  10. [AIR] 获取U盘,打开U盘