Pandas常用方法

Pandas 基本用法
是基于Numpy创建的

1.安装&创建df

Pip3 install pandas 

①使用Series ,DataFrame(一维数组,二维数组)

from pandas import Series ,DataFrame
from pandas as pd

*本文以 data 作为数据来使用

 pd.date_range(“20080301”,periods= 6)  #从20080301 开始产生6个日期
 #在Series 和DataFrame 参数中还可以设置index 和columns(写成列表)   DataFrame中的数据形式有多种 ,字典.......

常见用法

data.shape  #查看数据有几行几列
data.info()   #查看数据信息
data.dtypes   #查看每列数据的类型
     .index  #查看所有行号
     .columns  # 查看所有列号
     .values  #查看所有值
     .apply(类型)    #改变数据类型 
#(   改变某列数据类型    data[“列名”].astype( int )      )
     .describe( )   #  查看data中的
            count   计数
            mean  平均值
            std   标准差  等等
data.T    #二维表反转 (index  和 columns交换)
data.sort_index(axis = 1,ascending =False)
#axis = 0或1        0为行排序  1为列排序
#         ascending   =  true  或false    true为正序  (小到大)
data.head(5)   #只显示前五行数据
data.tail(5)   #只显示后五行数据
#设置显示配置
pd.set_option( “display.max_columns”,10)  显示1010列
pd.set_option( “display.max_rows”,10)
data.set_index(“某列名”)  # 把某列名设置为index  也可以用列表设置成多个index
    .reset_index(level = 0,drop =true )   #恢复...
     #Level = 0  表示最外层索引
    .sort_values( by =”E”)  #按照 列标E 的值排序
data[“A”]  或data.A  #输出A整列的数据
data[ 0:3 ]  切片  行
data[20080301:20080305]   筛选

2.数据导入 ,导出 read_XX

有多种格式
Csv excel json html pickle hdf5…
读取数据时 常见参数

1、index_col =0   #第0列作为索引(作为index)
2、header =None  #去掉columns  (变为数字标)
3、names = 列标的列表     #设置列的名字
4、dtype = {‘Goals’:np.float64}   #把Goals列设为float型
5、usecols =[列表]     #只读取列表中有的列名的数据
6、sep = “xx”   #以  xx  作为数据的分隔符
7、skiprows = [0,1] #跳过第 0,1行的数据
8、sKip_footer =1   # 跳过倒数一行的数据
9、engine =’python’  #和 8一起使用
10、nrows =5   # 只读出五行数据
11、Parse_date= true  #自动判定时间序列

read_excel中 文件可能有多个表 可用参数 sheetname = ‘某表名称’
to_excel( ) 中,参数index = False 可以不把index 标签写到文件中
参数 sheet_name= ‘xxx’ 可以设置表名 excel文件后缀为 .xlsx

②Execl文件追加写入

from pandas import ExcelWriter
with ExcelWriter(“路径”)  as w:
    data.to_excel(w,sheet_name = “表1)
    data.to_excel(w,sheet_name = “表2)

③数据库的读取,写入

data = pd.io.sql.read_sql( a , b, c )
a  查询语句
b  connection  连接数据库
C   index_col = “index”

data.to_sql(“数据表名”,connection,  if_exits =”replace”)
#参数 if_exits =”replace”  #若已有该表则替换

④hdf5读取 (后缀为 .h5)

hdf = pd.HDFStore(‘路径’)
hdf是一个对象,类似字典
hdf[“df”] =data

3.根据 loc 进行数据精确选择

data.loc[20060301,[“A”,”B”] ]   #标签名
data.iloc[ 3,1]     Data.iloc[ 3:5,1:3]
data.iloc[ [1,2,3],[5,6,7]]    #   行/列号
#以上两种混合
data.ix[ ]                                                                                              
#根据判断 筛选数据
data[data.A>0]                                                                                                                                                                                                                                                                                     
#数据设置
#根据上面的   iloc  和loc  设置数据
data.iloc[ 2,2] =67
data[data.A>0] =12
data[“A”] =np.nan   #根据行列设置

4.添加数据

#1.增加一列数据
data[“新列号”]=pd.Series([1,2,3,4,5,6,7] , index=date_range(20080301,periods= 6))
#2.删除数据 
data.drop( 0,inplace =True)  #删除第0行数据  
Inplace = True  否则返回一个新data

5.处理丢失数据、填缺失值、重复值处理

处理一些数据中的NaN数据

①使用dropna( ) 去掉Nan的行或列

data.dropna( axis =0, how =any)
 #axis =0 对行操作    how=”any”或”all”
#any  只要有NaN即去掉   all 全都是NaN才去掉
#参数 thresh= 5   Nan超过5个才去掉

②替换 、填充 数据

Data.fillna(values =0)  #nan值全部替换为0
    #参数 method =’ffill’或’bfill’  
    #ffill:用前一个值填充  bfill 用后一个值填充

③ isnull( ) #判断数据是否丢失

   Pd.isnull( data)  #NaN  为True  
   np.any( data.isnull( ) )

data.interpolate( )    #  插值,即NaN填充为上一个和下一个值得平均值,可用参数method=“time”基于时间序列填充,参数method =“values”基于index 填充 

⑤ 重复行处理

data.duplicated( )  #判断是否有重复行 
data.drop_duplicates( [ “A”,”B”] )  #去掉重复行
#参数可以是一个列表   该列表为一些列标,列表里为哪些列作为判断重复的标准
#若使用另一个参数keep =”last”  则保留重复行后面的那行

6.数据转换、重构

1、transform (也是数据清洗的一种方法)
①映射 x.map( y)
x

one1
two2
three3

y

1a
2b
3c

结果
One a
Two b
Three c

② 替换

data.replace( 1,5)  #把data中的1都替换为5  (只替换一个值)
'''
也可以这样  
data.replace( [ 1,2,3 ] , [4,5,6] )  
把data中的1,2,3,替换为4,5,6
还可以用字典格式   
data.replace( {1:6 , 3:10 } )  
把值1替换为6  3替换为10
还可以     
data.replace( {“A”:1,“B”:2},100)  
把A列中的1,B列中的2 替换为100 ''''

③ apply( ) 函数
data
        a b c
0|    0 1 2
1|    3 4 5
2|    6 7 8
3|    9 10 11
-----------------------

data.apply( lambda col: col.sum() )  

结果
a 18
b 22
c 26

data.apply(  lambda row:  row.sum(),axis =1 ) 

结果
0 3
1 12
2 21
3 30

更常用apply添加一个列

#这个例子是添加列 “new”  为a和b的和  还是上面的data
data[“new”] = Data.apply(lambda r:  r.a*r.b ,axis= 1)

结果
data
      a b c new
0|   0 1 2 0
1|   3 4 5 12
2|   6 7 8 42
3|   9 10 11 90

2、 outlier 异常值的处理 (忘记了)

mask =np.abs( data.data-data.data.mean() ) >= ( 2*data.Data.std() )
#mask 为标准差之外的异常值
data[mask ] =data.data.mean()  #用均值填充异常值

7.重构 转换表或向量的结构

from collections import orderedDict   可以生成一个有序字典
1.pivot() 
2.pivot_table()
3. stack()
4. un_stack( )

函数pivot( )中的三个参数 index , columns , values
data.pivot( index=’列名A’ , columns=’列名B’ , values=’列名C’)
(有点类似groupby( ) )意思是把一个data A列设index…
      A B C D
0|   x a 1
1|   x b 2
2|   y a 4
3|   y c 5

结果

Babc
A
x12NaN
y4NaN5

values 缺省条件下会把其余列标都当做values (即多列pivot)
常见错误 index/columns 索引后对应有多行相同值
此时就要使用pivot_table( ) 它会对相同检索的值求(默认)平均值,还可以通过参数 aggfunc = np.max/mean/mix …改变这个默认 参数fill_value = 0 填充NaN
参数 Margins =true 显示汇总,合计
Pivot() 实际上是对向量 进行stack的特例
Stack 是把最内层的 列 索引变成最内层的 行 索引
Unstack 是把最内层的 行 索引变成最内层的 列 索

8.数据合并 concat ,merge ,join

res = pd.concat( [data1 ,data2 , data3] , 
					axis =0,ignore_index =True)
#axis = 0 /1  
# 0  行合并   1   列合并    
#ignore_index =True是否重置index
res = pd.merge( data_left,data_right,on =”key”)
#参数on  为合并数据时用的是哪些列标,也可以多个
res = pd.merge( data_left,data_right,
				on =[”key1”,”key2”] , how = “inner”)

how 的四种参数,默认为 inner
1.Inner 交集,保留两表公共key部分
2.outer 并集,保留两表所有key部分
3.left 只保留左表key里有的行数据
4.right 只保留右表key里有的行数据
参数indicato = True/False/”xxx”,作用是输出每项合并方式( 会在结果的最左边多一个_merge列,里面有提示 left_only , right_only ,both) ”xxx”为设置这个列名
#此为根据 列 合并 ,也可以根据 行 合并, 用参数left_index = True, right_index =True

join()与merge()差不多 但使用的是index label
#Pandas 中的  groupby
groupby 与MapReduce  相似  使用 groupby返回一个对象,   
对象.groups查看对象内容
还可以  .size() 统计每组的大小等等

groupby() 的参数
① 列名,
② 列名的列表(多重分组), 还可用lambda函数
参数 level = 0 #按第一级行标 #这部分还有疑问
                 = [ ] 里面为行标名

在这里插入图片描述 数值为1的在第11行,数值为2的在第8,9,15 行

aggregate( )聚集函数

参数为一个函数

pd.cut( )
在这里插入图片描述

9.Pandas中的绘图功能

Pandas 中也有绘图功能 可以由plot()函数完成 默认为折线图
Data.plot(grid = False ,)
参数 ① grid = True /False 是否显示背景网格线,默认False
参数② subplot = True /False 是否将每列的数据独立绘制一个图 默认False
参数③ secondary_y =”某列名” 设置第二坐标(右边的Y坐标)
参数 kind density密度曲线
参数 stacked =true /false #是否为堆叠
参数color =[] #设置颜色

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值