pandas

三大对象

1.DataFrame(index,  columns ,values)

  1)先从文件(excel,csv,mysql)中读取,或者自己制造一个DataFrame对象

 

  2)查看数据

    查看数据的形状(几行几列)

    查看每一列的数据类型,数据中是否有空值(行、列),查看每一列和标签的关系(离散-柱状图,连续-密度图或者子状图),两列之间的相关度,查看整个的数据分布(最小,最大,均值,标准差等)目的之一是找出异常值。

  3)清洗数据

    删除

      列(如序号列)、行、空值的列(如:一列中绝大多少是空值)

    替换

      空值(一列中极少数空值,替换方法许多,如均值(连续型如年龄),众数(离散型,如性别),线性差值等),去掉空格/特殊字符,数据类型转换,列名,索引名

  4)整理

      排序:列的值,索引

      修改结构:列变成索引

      分组:索引,列

        注意:分组要做数据统计   (透视表-pivot-table、 交叉表)

      应用函数

        列

  5)数据合并

    多个DateFrame 按照不同的轴合并

  6)数据统计

    count,sum,max,min  mean

  7)可视化

 

使用:

    导入: import pandas as pd

1.数据类型

  1)Series:index(行索引)+values(1维numpy数据)

     2)DataFrame:index(行索引)+Columns+values(2维numpy数据)

 

 

 

2.读入/写入数据

  1)手动创建(内存)

    df = pd.DataFrame(2维列表/2维numpy数组/字典,index =1维列表/数组 ,columns =1维列表/数组  )

  2)从文件读取(csv--以逗号分隔的文本、excel、json、xml、html等)

    df = pd.read_csv('csv文件',sep=‘,’ , encoding ='utf-8/gbk',header= True/False)

  3)从数据库中读取

  4)写入文件/数据库

    df.to_csv('csv文件',header= True, index= False)

3.查看数据

  1)查看数据的形状(几行几列)

    df.shape

  2)查看数据列的数据类型和空值

    df.info()

    df.isnull.sum(axis=0/1)/df.shape[0/1]

  3)查看数据的前5行和后5行

    df.head()、df.head(n)

    df.tail()、df.tail(n)

  4)查看统计信息

    df.describe(include = 'all')

  5)查看某列的唯一性(unique)

    s.unique()

    s.value_counts()   #可以用于计数

    如:

    df.年龄.value_counts()

              df['年龄'].value_counts()

   柱状图显示结果:

import matplotlib.pyplot as plt
df['年龄'].value_counts().plot(kind='bar')
plt.show()

 

 

4.选择数据

  方法1:

    获取行   df[切片/全部行的布尔数组]

         如: df[1:4]    #获取第2,3,4 三条数据

         df[[False,True,True,True,False,False]]

         df[df.age>15 ]            #以上两条含义一致,更多选择下一条

    获取列

      df[列名] 或df.列名, df[列表]

  方法2

    获取行/列    df.iloc[行自动索引切片,列自动索引切片]

         df.loc[行手动索引切片,列手动索引切片]

          df.loc[:,'性别']

           df.loc[:,['性别','年龄']]

          df.iloc[1:4:]

  增加列  df[不存在的列] = 值

  增加行  df.iloc[6]=['wangwu',20,'Y']  #报错

      df.loc[3]=['wangwu',20,'Y']   #已知道有多少行

      len(df)  #用于测试一共有多少行  

     改进:df.loc[len(df)]=['wangwu1',20,'Y']

 

 

相关代码:

import pandas as pd


df = pd.DataFrame(
    [
        ['zhangsan',18,'Y'],
        ['lisi',19,'N'],
        ['wangwu',20,'Y']
    ],index=['a','b','c'],columns=['姓名','年龄','是否结婚'])
df

df.index,df.columns,df.valuse

df = pd.read_csv('1.txt')
df

df.to_csv('2.txt',header= True)

df.年龄, type(df.年龄)

df.to_csv('3.txt',index = False)

df.shape


df.info()

df.tail()

df.tail(2)

df.describe()

df.describe(include = 'all')

df.年龄.unique

df.年龄.value_counts()

df['年龄'].value_counts()

import matplotlib.pyplot as plt
df['年龄'].value_counts().plot(kind='bar')
plt.show()

df.loc[3]=['wangwu',20,'Y']

df.loc[len(df)]=['wangwu1',20,'Y']

df

 5.清洗数据

  1)删除

      drop(行/列/列的列表---格式是字符串/整数/列表 , axis = 0/1)

      dropna:删除含有空值 的列和行,很少用。

   注意:大部分删除的列,1)感觉没有用的列,通常是id,name这些列。2)空值太多的列 3)没用的列-通过特征工程比如方差为0,过滤法F减压

df.drop('姓名',axis=1) 结果变,df没有变,如果变,两种办法,1)把结果赋值给df,2)把参数加入inplace=True

 

#删除空值的列
#先查看所有列的空值
df.info()  #结果不是统计数据,不方便
df.isnull()  #是空值才为True
df.isnull().sum(axis = 0) #沿着轴0进行累加空值数
df.isnull().sum(axis = 0)/ df.shape[0] #沿着轴0得到空值的比例数


#删除空值的行
#先查看所有行的空值

df.isnull().sum(axis = 1)/ df.shape[1] #沿着轴1得到空值的比例数

 

df.drop(3,axis = 0)  #删除第三行

 

df.isnull().sum(axis = 1)/ df.shape[1]<0.8   #找出空值数比例在0.8以下的列

df2 = df[(df.isnull().sum(axis = 1)/ df.shape[1]<0.8)]   #选择满足该比例的数据列

 

 

 

   2)替换

      s.fillna(值):空值替换

      s.replace(old_value, new_value):非空值替换

    举例:

      df.是否结婚.replace ('Y',0)

 

#连续型的用均值
#离散型的用众数
df.是否结婚.mode()[0]


df.是否结婚 = df.是否结婚.fillna(df.是否结婚.mode()[0])

  

  3)数据类型转换

    astype

    pd_todatetime(要改变的字符串, format = 格式) #字符串格式良好,则不用写format

举例:

  查看类型:dy.dtypes

    df.年龄.astype(float)

 

 

  4)修改列名

    df.rename(old_name,new_name)

  5)apply 函数

    apply(lambda x:处理x)

  6)排序

    sort_value

    sort_index

 

  df.sort_value('年龄',axis=0,ascendinig = True) #从小到大, 若要从大到小,改为False

  df.sort_value(['年龄','性别'], axis=0,[ascendinig = True,ascending = False]) #从小到大, 若要从大到小,改为False

6。数据整理

  1)连接

    拼接: pd.concat((df1,df2),axis=0/1)  

    连接:pd.merge(左边,右边,on = 关键字,how = ‘inner/left/right’)

  2)分组

    set_index

    reset_index

    stack

    unstack

    groupby

  3)透视表

    pivot_table(哪几列数据,)

    df.pivot_table(value='价格',index =‘产地’,columns= '类别',aggfunc='mean').fillna(0)

 

  4)交叉表(把一列作为)用于统计分组频率的特殊透视表,

    crosstab

  5)统计

    

 

 

 

4.查看数据分布    

 

 

 

 

 

2.Series

3.Panel

posted @ 2019-07-16 10:13  evan0925  阅读(208)  评论(0编辑  收藏  举报