Pandas 基础

作者: iOSDevLog | 来源:发表于2019-05-25 00:38 被阅读6次

    Pandas 简介

    Pandas

    Pandas 库基于 NumPy 构建,为 Python 编程语言提供易于使用的数据结构和数据分析工具。

    Pandas

    使用以下约定导入 Pandas

    import pandas as pd
    

    帮助

    help(pd.Series.loc)
    

    Pandas 数据结构

    序列(Series)

    能够保存任何数据类型的一维标记数组

    s = pd.Series([1, 3, 5, 7], index=['天', '地', '玄', '黄'])
    
    # 左侧一列为索引
    s
    

    天 1
    地 3
    玄 5
    黄 7
    dtype: int64

    数据框(DataFrame)

    不同类型列的二维标记数据结构,类似 Excel 表格

    上面一行为列名

    左侧一列为索引

    - 民族 姓别 年龄
    1 小武 3
    2 小久 1
    3 小鸭 -
    data = {'姓': ['贾', '贾', '张'],
            '名': ['小武', '小久', '小鸭́'],
            '民族': ['汉', '汉', '汉'],
            '年龄': [3, 1, None]}
    
    data
    

    {'姓': ['贾', '贾', '张'],
    '名': ['小武', '小久', '小鸭́'],
    '民族': ['汉', '汉', '汉'],
    '年龄': [3, 1, None]}

    df = pd.DataFrame(data, columns=['姓', '名', '年龄'])
    
    df
    
    - 民族 姓别 年龄
    1 小武 3
    2 小久 1
    3 小鸭 -

    文件 I / O

    读写 CSV

    pd.read_csv('file.csv', header=None, nrows=5)
    df.to_csv('myDataFrame.csv')
    

    读写 Excel

    pd.read_excel('file.xlsx')
    pd.to_excel('dir/myDataFrame.xlsx', sheet_name='Sheet1')
    xlsx = pd.ExcelFile('file.xls')
    df = pd.read_excel(xlsx, 'Sheet1')
    

    读取数据库

    from sqlalchemy import create_engine
    engine = create_engine('sqlite:///:memory:')
    pd.read_sql("SELECT * FROM my_table;", engine)
    pd.read_sql_table('my_table', engine)
    pd.read_sql_query("SELECT * FROM my_table;", engine)
    

    read_sql() 是 read_sql_table() 和 read_sql_query() 的便捷包装器

    pd.to_sql('myDf', engine)
    

    选择

    获取

    # 获取 1 个数据
    s['天']
    

    1

    # 获取 DataFrame 的子集
    df[1:]
    

    选择,布尔索引 & 设置

    位置

    按行和列选择单个值

    df.iloc[[0], [1]]
    
    df.iat[0, 1]
    

    '小武'

    标签

    按行和列标签选择单个值

    df.loc[0, '姓']
    

    '贾'

    df.at[0, '姓']
    

    '贾'

    布尔索引

    s[~(s > 1)]
    

    天 1
    dtype: int64

    s[(s < -1) | (s > 2)]
    

    地 3
    玄 5
    黄 7
    dtype: int64

    df[df['年龄']>1]
    

    设置

    将序列 s 的索引 '宇' 设置为 9

    s['宇'] = 9
    s
    

    天 1
    地 3
    玄 5
    黄 7
    宇 9
    dtype: int64

    删除(dropping)

    从行中删除值(axis = 0)

    s.drop(['天', '地'])
    

    玄 5
    黄 7
    宇 9
    dtype: int64

    从列中删除值(axis = 1)

    df.drop('姓', axis=1)
    

    排序和排名

    按轴标签排序

    df.sort_index()
    

    按轴的值排序

    df.sort_values(by='年龄')
    

    从小到大排序的下标

    df.rank()
    

    检索 Series / DataFrame 信息

    基本信息

    df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
                      index=['cobra', 'viper', 'sidewinder'],
                      columns=['max_speed', 'shield'])
    

    (行,列)

    df.shape
    

    (3, 2)

    描述索引

    df.index
    

    Index(['cobra', 'viper', 'sidewinder'], dtype='object')

    描述 DataFrame 列信息

    df.columns
    

    Index(['max_speed', 'shield'], dtype='object')

    DataFrame 信息

    df.info()
    

    非 NA 值的数量

    df.count()
    

    max_speed 3
    shield 3
    dtype: int64

    摘要

    总和

    df.sum()
    

    max_speed 12
    shield 15
    dtype: int64

    累积值

    df.cumsum()
    

    最小值

    df.min()
    

    max_speed 1
    shield 2
    dtype: int64

    最大值

    df.max()
    

    max_speed 7
    shield 8
    dtype: int64

    最小索引值

    df.idxmin()
    

    max_speed cobra
    shield cobra
    dtype: object

    最大索引值

    df.idxmax()
    

    max_speed sidewinder
    shield sidewinder
    dtype: object

    摘要统计

    df.describe()
    
    均值
    
    ```python
    df.mean()
    

    max_speed 4.0
    shield 5.0
    dtype: float64

    中位数

    df.median()
    

    max_speed 4.0
    shield 5.0
    dtype: float64

    应用函数

    f = lambda x: x*2
    

    应用函数

    df.apply(f)
    

    按元素应用函数

    df.applymap(f)
    

    数据对齐

    内部数据对齐

    值 NA 在不重叠的索引中引入

    s3 = pd.Series([7, -2, 3], index=['玄', '黄', '宇'])
    
    s + s3
    

    地 NaN
    天 NaN
    宇 12.0
    玄 12.0
    黄 5.0
    dtype: float64

    填充方法的算术运算

    借助填充方法自行完成内部数据对齐

    s.add(s3, fill_value=0)
    

    地 3.0
    天 1.0
    宇 12.0
    玄 12.0
    黄 5.0
    dtype: float64

    s.sub(s3, fill_value=2)
    

    地 1.0
    天 -1.0
    宇 6.0
    玄 -2.0
    黄 9.0
    dtype: float64

    s.div(s3, fill_value=4)
    

    地 0.750000
    天 0.250000
    宇 3.000000
    玄 0.714286
    黄 -3.500000
    dtype: float64

    s.mul(s3, fill_value=3)
    

    地 9.0
    天 3.0
    宇 27.0
    玄 35.0
    黄 -14.0
    dtype: float64

    ipynb 请查看:https://github.com/iOSDevLog/AIDevLog/blob/master/Python%20%E5%9F%BA%E7%A1%80/PandasBasic.ipynb

    相关文章

      网友评论

        本文标题:Pandas 基础

        本文链接:https://www.haomeiwen.com/subject/ediozqtx.html