美文网首页
Pandas基础笔记

Pandas基础笔记

作者: 波罗的海de夏天 | 来源:发表于2020-05-08 09:48 被阅读0次

    pandas是基于numpy构建的。

    目的是使以numpy为中心的应用变得更加简单。
    import pandas as pd
    from pandas import Series, DataFrame
    

    一、Series类型

    1、这个类型类似于一维数组对象。它是由一组数据及一组与之相关的数据标签(索引)组成的。

    obj = Series([1, 2, 3, 4, 5, 6])
    print(obj)
    
    print(obj.values)
    
    print(obj.index)
    obj[5]
    

    2、自定义索引

    obj = Series(['a', 'b', 'c', 'd', 'e'], index=[1, 2, 3, 4, 5])
    print(obj)
    
    obj[5]
    

    3、类似于字典, 可通过字典转换

    data = {'a': 10000, 'b': 20000, 'c':30000}
    obj = Series(data)
    obj
    
    # 根据index索引转换
    keys = ['a', 'c']
    obj_1 = Series(data, index=keys)
    print(obj_1)
    

    4、缺失数据处理

    data = {'a': 10000, 'b': 20000, 'c':30000}
    obj = Series(data)
    # 判断是否有数据缺失
    pd.isnull(obj)
    
    # 判断是否有数据缺失
    pd.notnull(obj)
    
    data = {'jack':None, 'tony':55, 'robbin': 50, 'yiming':None}
    obj = Series(data)
    obj
    # None null ''
    
    obj.name = 'NameAndAge'
    obj
    
    obj.index.name = '姓名'
    obj
    

    二、DataFrame类型

    • DataFrame 是一个表格型数据结构,它含有一组有序的列,每列可以是不同类型的值(数值、字符串、布尔值等都可以);
    • DataFrame 本身有行索引,也有列索引;
    • DataFrame 可以理解成是由Series组成的字典;

    1、创建及基本筛选

    DataFrame构造函数数据类型 -- 字典、numpy列表、Series类型、DataFrame类型

    data = {
        '秦': ['嬴政', '胡亥', '子婴', None],
        '汉': ['刘邦', '刘彻', '刘询', '刘秀'],
        '唐': ['李渊', '李世民', '李治', '武则天'],
        '宋': ['赵匡胤', '赵匡义', '赵恒', '赵祯']
    }
    frame_data = DataFrame(data)
    frame_data
    
    frame_data['汉']
    
    import numpy as np
    dates = pd.date_range('20200506', periods=6)
    dates
    
    df = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=list('ABCD'))
    df
    
    # 转置
    df.T
    
    # 筛选 左闭右闭
    df['20200506':'20200508']
    # loc起始下标为1
    df.loc['20200506':'20200508']
    df.loc['20200506':'20200508', :]
    df.loc[:, ['A', 'B']]
    df.loc['20200506':'20200508', ['A', 'B']]
    df.loc['20200506', ['A', 'B']]
    df.loc['20200506', 'A']
    

    2、头部、尾部筛选

    df.head(2)
    df.tail(3)
    

    三、Pandas的重新索引

    obj = Series([3.5, 2.6, -2.3], index=list('abc'))
    obj
    
    obj_1 = obj.reindex(list('abcde'))
    obj_1
    
    obj_2 = obj.reindex(list('abcde'), fill_value=0)
    obj_2
    
    obj = Series([3.5, 2.6, -2.3], index=[0,2,4])
    obj
    
    # 向前填充
    obj.reindex(range(6), method='ffill')
    
    # 向后填充
    obj.reindex(range(6), method='bfill')
    

    四、算数运算和数据对齐

    • 加法:add
    • 减法:sub
    • 乘法:mul
    • 除法:div
    • 取余:mod
    d1 = Series([1.3, 1.5, 2.6, -3.5], index=list('abcd'))
    d1
    
    d2 = Series([-1.3, -1.5, -2.6, 3.9, 9.8], index=list('abcde'))
    d2
    
    # 加法
    d1 + d2
    
    df1 = DataFrame(np.arange(9).reshape((3, 3)), columns=list('abc'), index=list('123'))
    df1
    
    df2 = DataFrame(np.arange(12).reshape((4, 3)), columns=list('cde'), index=list('1234'))
    df2
    
    # 在行和列上都发生操作,没有重叠的部分都为空
    df1 + df2
    
    # 相加时,其中一个为空时默认以‘fill_value’相加
    # 两者都为空时,结果为空
    df1.add(df2, fill_value=0)
    

    五、DataFrame 和 Series 之间的运算

    frame = DataFrame(np.arange(12).reshape((4, 3)), columns=list('bde'), index=[1, 2, 3, 4])
    frame
    
    series = frame.loc[1]
    series
    
    # 广播相减
    frame - series
    # 广播相加
    frame + series
    
    series_1 = Series(range(3), index=list('bef'))
    series_1
    
    # 只有重叠列进行操作,其余为空
    frame + series_1
    

    六、排序

    1、Series

    obj = Series(range(4), index=['d', 'e', 'a', 'b'])
    obj
    
    obj.sort_index()
    
    obj.sort_values()
    

    2、DataFrame

    frame = DataFrame(np.arange(8).reshape(2,4), index=['two', 'one'], columns=['c', 'd', 'a', 'b'])
    frame
    
    frame.sort_index()
    frame.sort_index(axis=1)
    
    frame = DataFrame({'b': [4, 7, 1, -1], 'a': [0, 4, 2, 0]})
    frame
    
    frame.sort_values(by='b')
    

    七、层次化索引

    它能够让你在一个轴上拥有多个索引级别,另外一种说法是它能够使你可以以低纬度形式处理高纬度数据(降维)
    1、Series

    data = Series(np.random.randn(10), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],[1, 2, 3, 1, 2, 3, 1, 2, 3, 3]])
    data
    
    data.index
    
    data['b']
    data['b':'c']
    data[:,2]
    data['b', 1]
    

    2、DataFrame

    frame_data = DataFrame(np.arange(12).reshape(4,3), 
                           index=[['a', 'a', 'b', 'b'], [1,2,1,2]],
                          columns=[['Black', 'Yellow', 'Blue'], ['Green', 'Red', 'Green']])
    frame_data
    
    frame_data.index.names = ['key1', 'key2']
    frame_data
    
    frame_data.columns.names = ['color1', 'color2']
    frame_data
    
    frame_data.index
    
    frame_data['Black']
    frame_data.loc['a']
    frame_data.loc['a', ['Black']]
    
    frame_data.sum(level='key2')
    frame_data.sum(level='color2', axis=1)
    

    八、pandas文本格式数据处理

    查看数据:cat data1.csv

    # 读文件
    pd.read_csv('data1.csv')
    pd.read_table('data1.csv', sep=',')
    pd.read_csv('data1.csv', header=None)
    pd.read_csv('data1.csv',index_col='追问')
    pd.read_csv('data1.csv', index_col=['追问','问题'])
    pd.read_csv('data2.csv', skiprows=[2])  # 行号是从1开始的
    pd.read_csv('data1.csv', nrows=5)
    
    
    chunker = pd.read_csv('data1.csv', chunksize=10)
    chunker
    sd = Series([])
    for c in chunker:
        sd = sd.add(c['问题'].value_counts(), fill_value=0)
        
    sd
    
    # 写文件
    data = pd.read_csv('data1.csv', nrows=5)
    data.to_csv('test1.data', sep='|')
    
    # excel
    pd.read_excel('data3.xlsx')
    
    # 图表显示
    excel = pd.read_excel('data3.xlsx', sheet_name='Sheet2')
    pl = excel.plot(kind='scatter', x='age', y='p').get_figure()
    pl.savefig('1.jpg')
    
    # 图表显示
    dates = pd.date_range('20200501', periods=6)
    df = DataFrame(np.random.rand(6,4), index=dates, columns=list('abcd'))
    df
    pl = df.plot(kind='scatter', x='a', y='b').get_figure()
    pl.savefig('2.jpg')
    

    相关文章

      网友评论

          本文标题:Pandas基础笔记

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