zoukankan      html  css  js  c++  java
  • 5分钟入门pandas

    pandas是在数据处理、数据分析以及数据可视化上都有比较多的应用,这篇文章就来介绍一下pandas的入门。劳动节必须得劳动劳动

    1. 基础用法

    以下代码在jupyter中运行,Python 版本3.6。首先导入 pandas

    import pandas as pd
    
    # 为了能在jupyter中展示图表
    %matplotlib inline
    
    # 从csv文件读取数据,也可从excel、json文件中读取
    # 也可以通过sql从数据库读数据
    data = pd.read_csv('order_list.csv')
    
    # 输出几行几列
    data.shape
    
    output:
    (1000, 3)
    

    可以看到,变量 data 是一个二维表,有1000行,3列。pandas中这种数据类型被称作 DataFrame。

    # 查看数据描述
    data.describe()
    

    data 中有3列,good_id、good_cnt 和 order_id 分别代表商品id、购买该商品数量和订单id。最左侧是describe函数统计的指标,包括每一列的数量、均值、标准差、最大值、最小值等等。

    # 预览数据,条数可设
    data.head(3)
    
    # 获取第2行数据
    data.loc[2]
    
    output:
    good_id       100042
    good_cnt           1
    order_id    10000002
    Name: 2, dtype: int64
    
    # 获取多行数据,数组元素代表行号
    data.loc[[1, 2]]
    
    # 获取商品id=100012的所有记录
    data[data['good_id']==100012]
    
    # 获取商品id=100012且每笔订单销量=6的所有记录  
    data[(data['good_id']==100087) & (data['good_cnt']==6)]
    
    # 获取订单号在[10000000, 10000042]中的记录
    data[data['order_id'].isin([10000000, 10000042])]
    
    # 画100012商品,每笔订单销量折线图
    data[data['good_id']==100012]['good_cnt'].plot()
    
    # 画100012商品,销量柱状图
    data[data['good_id']==100012]['good_cnt'].hist()
    
    # 更新数据,将第1行的good_cnt列改为10
    data.loc[1, 'good_cnt'] = 10
    data.head(3)
    
    # 将100012商品每笔订单销量都改为20
    data.loc[data['good_id']==100012, 'good_cnt'] = 20
    data.head(3)
    

    2. 中级用法

    # 统计每种商品出现次数
    # 即:每种商品的下单次数
    data['good_id'].value_counts()
    output:
    100080    18
    100010    16
    100073    16
    100097    15
    100096    15
              ..
    100079     5
    100077     5
    100007     4
    100037     4
    100033     4
    Name: good_id, Length: 100, dtype: int64
    
    # 取出商品销量列,该列中每个值都加1
    data['good_cnt'].map(lambda x: x+1)
    output:
    0      21
    1      11
    2       2
    3       4
    4      10
           ..
    995     8
    996     9
    997     6
    998     5
    999     9
    Name: good_cnt, Length: 1000, dtype: int64
    

    这里,map并不改变原有的 data 中的数据,而是返回新的对象。

    # 对数据集每列调用给定的函数
    data.apply(len)
    

    这里是对每列执行len函数,当然apply中的len函数也可以换成自定义的 lambda 表达式。另外,如果想按行做处理,则在调用apply函数时加上axis=1参数即可。

    # 对数据集中所有元素调用给定函数
    # 同样不改变原有数据集
    data.applymap(lambda x: x*100) 
    
    # 计算每列之间的相关系数
    data.corr()
    
    # 画出相关系数矩阵
    pd.plotting.scatter_matrix(data, figsize=(12,8))
    

    以左小角为例,它表示商品id(good_id)和订单id(order_id)之间的相关性。由于点比较分散,没有任何规律,因此可以说明这两列在数据值上没有相关性,这也好理解,因为本来它俩就是不同的概念。

    相关系数矩阵一般用于机器学习中观察不同特征之间的相关性。

    3. 高级用法

    实现SQL join操作

    
    # 构造DateFrame,代表订单发生的城市
    order_city_df = pd.DataFrame(
        dict(order_id=[10000000, 10000001], 
             city=['上海', '北京'])
    )
    
    # 实现join
    data.merge(order_city_df, on=['order_id'])
    

    实现SQL group by操作

    # 统计每个商品的总销量
    data.groupby('good_id')['good_cnt'].sum().reset_index()
    

    遍历 DataFrame 中每行数据

    dictionary = {}
    
    for i,row in data.iterrows():
      dictionary[row['good_id']] = row['good_cnt']
    

    pandas的入门就介绍到这里,希望能对你有帮助。对于想继续深入的朋友可以参考pandas官方文档,中英文都有。另外,我们使用pandas一般都是单机来处理,如果数据量比较大,单机运行起来会比较慢。这时候你可能会用到另外一个工具叫 Dask,它的接口兼容 pandas,可以与pandas相互转换,并且可以运行在集群上分布式处理数据。

    如需完整代码,在公众号回复关键字 pd 即可

    欢迎公众号「渡码」,输出别地儿看不到的干货。

  • 相关阅读:
    模拟ORA-26040: Data block was loaded using the NOLOGGING option
    poj 2752 Seek the Name, Seek the Fame (KMP纯模版)
    一入python深似海--变量和对象
    Codeforces 448 C. Painting Fence
    Unix网络编程 高级IO套接字设置超时
    [ JavaScript ] JavaScript 实现继承.
    讲座:与迷茫为友的成长
    分享:进化版动漫更新提醒(微信及软件)
    设计模式------模板方法模式
    BasePath问题-nginx负载均衡配置
  • 原文地址:https://www.cnblogs.com/duma/p/12826731.html
Copyright © 2011-2022 走看看