yao
  • 前言
  • Mac环境配置
    • 1.python配置
  • 部署安装
    • 博客blog文档md模板
    • linux安装python3
    • Docker部署
      • Compose-bigdatabase-单组件启动(docker)
      • Compose-Spark组件-单独启动(docker)
      • Docker-通过dockerfile构建镜像(需测试)
      • docker-yaosong5仓库dockerImages汇总
      • Docker基础镜像中-所有home配置
    • gp部署
      • tt
      • 命令和第二次搭建-ok
      • gp搭建遇到的错误
      • gp集群搭建①-下载greenplum
      • gp集群搭建②-新建用户免密登录
      • gp集群搭建③-greenplum系统搭建
  • 实际问题解决
    • kafka异常
    • 数仓-解决hive处理异常json命令行转义字符的问题
  • 数据分析
    • 数据分析总结-pandas
    • 数据分析总结-numpy
  • 应用环境
    • Docker环境启动流程
Powered by GitBook
On this page
  • 一、Series
  • 赋值
  • 取值
  • 数学运算
  • 数据缺失
  • 二、DataFrame
  • 创建一个DataFrame
  • 从DataFrame里选择数据
  • DataFrame元素赋值
  • 其他运算
  • 三、Index, reindex and hierarchical indexing
  • index objects
  • 四、Merge, Join, Concatenate, Groupby and Aggregate
  • Merge(join)
  • concatenate
  • Group By
  • describe
  • 五、Read from csv
  • 六、随堂案例:bikes routes counts

Was this helpful?

  1. 数据分析

数据分析总结-pandas

Previous数据分析Next数据分析总结-numpy

Last updated 6 years ago

Was this helpful?

[TOC]

一、Series

  • Series是一个一维的数据结构

赋值

  • pandas会默认用0到n来作为Series的index,但是我们也可以自己指定index

s = pd.Series([7, 'Beijing', 2.17, -1232, 'Happy birthday!'])
  • 还可以用dictionary来构造一个Series,因为Series本来就是key value pairs。

cities = {'Beijing': 55000, 'Shanghai': 60000, 'Shenzhen': 50000, 'Hangzhou':20000, 
'Guangzhou': 25000, 'Suzhou': None}
apts = pd.Series(cities)

前面定义的index就是用来选择数据的

apts[apts <= 50000] = 40000

取值

boolean indexing也可以用到pandas中来取值

apts[apts < 50000]

数学运算

  • apts / 2

  • apts * 2

  • np.square(apts)

    • square也可以写成 :apts 2

数据缺失

  • apts.notnull()

  • apts.isnull():

    • apts[apts.isnull()] 获取值为空的key,value

    • apts[apts.isnull() == False] 获取值不为空的key,value

    ​

二、DataFrame

一个Dataframe就是一张表格,Series表示的是一维数组,Dataframe则是一个二维数组,可以类比成一张excel的spreadsheet。也可以把Dataframe当做一组Series的集合。

创建一个DataFrame

dataframe可以由一个dictionary构造得到。

data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],'year': [2016,2017,2016,2017,2016, 2016],'population': [2100, 2300, 1000, 700, 500, 500]}
pd.DataFrame(data)

columns的名字和顺序可以指定

pd.DataFrame(data, columns = ['year', 'city', 'population'])

从DataFrame里选择数据

  • frame2['city'] = frame2.city

  • frame2.ix['three']: 这种是选取行index

  • frame2.ix[2] :这种方法默认用来选列而不是选行

  • 还可以用Series来指定需要修改的index以及相对应的value,没有指定的默认用NaN.

val = pd.Series([200, 300, 500], index=['two', 'three', 'five'])
  • 指定index的顺序,以及使用切片初始化数据

frame3['Beijing'][1:3]
frame3['Shanghai'][:-1]
pdata = {'Beijing': frame3['Beijing'][:-1], 'Shanghai':frame3['Shanghai'][:-1]}
  • 我们还可以指定index的名字和列的名字

frame3.index.name = 'year'
frame3.columns.name = 'city'

DataFrame元素赋值

fram2["population"]["one"] = 2200

其他运算

  • 一个DataFrame就和一个numpy 2d array一样,可以被转置: frame2.T

三、Index, reindex and hierarchical indexing

index objects

  • index的值是不能被更改的

  • 针对index进行索引和切片

    obj = pd.Series(np.arange(4), index=['a','b','c','d'])

    默认的数字index依旧可以使用

  • 如何对Series进行切片

  • 对DataFrame进行Indexing与Series基本相同

    frame = pd.DataFrame(np.arange(9).reshape(3,3),
    index = ['a', 'c', 'd'],
    columns = ['Hangzhou', 'Shezhen', 'Nanjing'])
  • 把一个Series或者DataFrame按照新的index顺序进行重排

    obj = pd.Series([4.5, 7.2, -5.3, 3.2], index=['d', 'b', 'a', 'c'])
    obj.reindex(['a', 'b', 'c', 'd', 'e'])
    obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value = 0)

    ​

  • 在reindex的同时,我们还可以重新指定columns

    frame.reindex(columns = ['Shenzhen', 'Hangzhou', 'Chongqing'])

    ​

  • 可以用drop来删除Series和DataFrame中的index

    obj3.drop(2)

    obj3.drop([2, 4])

  • unstack和stack可以帮助我们在hierarchical indexing和DataFrame之间进行切换。

    data.unstack()

    ​

四、Merge, Join, Concatenate, Groupby and Aggregate

Merge(join)

pd.merge(df1, df4, on='cities')

  • join on index

    df1.join(df4)

    df1.join(df4, how='outer')

    也可以用merge来写:pd.merge(df1, df4, left_index=True, right_index=True, how='outer')

concatenate

在concatenate的时候可以指定keys,这样可以给每一个部分加上一个Key。

以下的例子就构造了一个hierarchical index。相当于再加一级index

result2 = pd.concat(frames, keys=['x', 'y', 'z'])
  • 用inner可以去掉NaN

    result3 = pd.concat([result, df4], axis=1, join='inner')

    ​

  • 用append来做concatenation

    df1.append(df4)

    可以通过append添加一个row

    s2 = pd.Series([18000, 120000], index=['apts', 'cars'], name='Xiamen'
    df1.append(s2)
  • Series和DataFrame还可以被一起concatenate,这时候Series会先被转成DataFrame然后做Join,因为Series本来就是一个只有一维的DataFrame对吧。

Group By

groupby经常和aggregate一起使用

describe

describe这个function可以为我们展示各种有用的统计信息

bikes.dropna() 删除空值

dropna会删除所有带NA的行

五、Read from csv

六、随堂案例:bikes routes counts

pandas官网
dataframe详细解析
reindexs
读取csv文件