zoukankan      html  css  js  c++  java
  • pandas入门

    一、pandas的定义

    基于numpy的数据结构,主要有一维数组Series和二维数组DataFrame两种结构

    二、Series的基本概念

     1 import numpy as np
     2 import pandas as pd
     3 
     4 s = pd.Series(np.random.rand(5))
     5 print(s)
     6 print(type(s))
     7 # 是一个带有标签的一维数组,可以保存任何的数据类型(整数,字符串,浮点数,Python对象),轴标签,成为索引 index
     8 print(s.index)
     9 print(s.values, type(s.values))
    10 # series相比Ndarry,就是自带了一个索引 一维数组 + 对应的索引
    11 # series 更像一个有顺序的字典
    View Code

    三、Series的创建

    3.1 由数组(一维数组)和列表创建

    1 arr = np.random.randn(5)
    2 s = pd.Series(arr)
    3 print(s)
    4 # index 默认使用整数
    5 s = pd.Series(arr, index=list('abcde'))
    6 pd.Series([1,2,3,4,5], index=list('abcde'), dtype=np.float64)
    View Code

    3.2 由字典创建,字典的key就是index,values就是values

    1 dic = {'a':1, 'b': 2, 'c':'a'}
    2 s = pd.Series(dic)
    3 print(s)
    View Code

    3.3 由标量创建

    1 s = pd.Series(10, index=list('abcde'))
    2 s
    3 # 如果由标量创建,必须提供index,来匹配长度
    View Code

    3.4 名称属性

    1 s = pd.Series(10, index=list('abcde'), name='ten')
    2 s.name
    3 s.rename #重命名
    View Code

    四、Series的索引和切片

    4.1 位置下标,跟序列差不多

    1 s = pd.Series(np.random.rand(5))
    2 print(s)
    3 print(s[0], type(s[0]))
    4 s[[1,4]]
    View Code

    4.2 标签索引,相当于字典

    1 s = pd.Series(np.random.rand(5),index=list('abcde'))
    2 print(s)
    3 print(s['a'], type(s['a']), s['a'].dtype)
    4 # 选择多个[[]]  返回的是新的Series对象
    5 s[['a', 'd']]
    View Code

    4.3 切片

    1 s1 = pd.Series(np.random.rand(5))
    2 s2 = pd.Series(np.random.rand(5), index=list('abcde'))
    3 print(s1[1:4])
    4 print(s2['a':'c'])
    5 # 注意:用标签索引切片,闭区间  字符串索引,
    6 # 切片的写法和list一致
    7 s2[::2]
    View Code

    4.4 布尔型索引

    1 s = pd.Series(np.arange(10))
    2 s[4] = None
    3 bs1 = s>5
    4 bs2 = s.isnull()
    5 bs3 = s.notnull()
    6 bs3
    7 # 数组做判断之后,返回的是一个由布尔值组成的新的数组
    8 s[bs3]
    View Code

    五、Series的常用操作

    5.1 数据查看

    1 s = pd.Series(np.random.rand(50))
    2 s.head(10) #查看头部前10个数据
    3 s.tail(10) #查看尾部后10个数据
    View Code

    5.2 数据重新索引

     1 s = pd.Series(np.random.rand(5), index=list('abcde'))
     2 s.reindex(['c', 'd', 'a', 'd', 'ab'])
     3 # .reindex 根据索引重新排序,如果索引不存在 ,引入缺失值
     4 # 返回新的序列
     5 # fill_value 填充缺失值
     6 print(s)
     7 print('********')
     8 print(s.reindex(['c', 'd', 'a','a', 'd', 'ab'], fill_value=0))
     9 print('********')
    10 print(s)
    View Code

    5.3 数据对齐

    1 s1 = pd.Series(np.random.rand(3), index = ['Jack','Marry','Tom'])
    2 s2 = pd.Series(np.random.rand(3), index = ['Wang','Jack','Marry'])
    3 print(s1)
    4 print(s2)
    5 print(s1 + s2)
    6 # 会根据index 自动对齐
    7 # index顺序不影响
    8 # NaN和任何值进行计算都是NaN
    View Code

    5.4 数据删除

    1 s = pd.Series(np.random.rand(5), index=list('abcde'))
    2 
    3 s.drop('c')
    4 # drop 默认返回一个删除了指定数据的新的series
    5 s.drop(['a','c'])
    6 #s.drop('c', inplace=True)
    7 #s
    8 # inplace=True时,drop不会返回新的序列,会直接改变原数据
    9 # inplace 默认等于False
    View Code

    5.5 数据添加

    1 s = pd.Series(np.random.rand(5), index=list('abcde'))
    2 s2 = pd.Series(np.random.rand(5))
    3 s['f'] = 100
    4 s2[5] = 100
    5 s2
    6 # .append方法,直接添加一个数组
    7 s1=s.append(s2)
    8 s1
    9 # .append()返回一个新的series, 不改变原数据
    View Code

    5.6 数据修改

    1 s = pd.Series(np.random.rand(5), index=list('abcde'))
    2 print(s)
    3 s['a'] = 100
    4 print(s)
    5 # 直接通过索引赋值,类似列表
    View Code

    六、DataFrame的基本概念和创建

    6.1 基本概念

    二维数组,是一个表个型的数据结构,包含了有序的列,其列的值可以是字符串,数值,布尔值等,带有标签的二维数组。

     1 data = {'name':['Jack','Tom','Mary'],
     2         'age':[18,19,20],
     3        'gender':['m','m','w']}
     4 frame = pd.DataFrame(data)
     5 print(frame)
     6 # 二维数组,是一个表个型的数据结构,包含了有序的列,其列的值可以是字符串,数值,布尔值等
     7 # 带有标签的二维数组
     8 print(frame.index) #数据的索引
     9 print(frame.columns) #数据的列标签
    10 print(frame.values, type(frame.values)) #数据的值
    View Code

    6.2 DataFrame的创建

    6.2.1 由数组/list组成的字典创建

    1 data = {'name':['Jack','Tom','Mary'],
    2         'age':[18,19,20],
    3        'gender':['m','m','w']}
    4 frame = pd.DataFrame(data,index=['Jack', 'Tom', 'Mary'], columns=['age', 'name', 'gender', 'height'])
    5 #  一个键值对 ,是一列,所以值的长度要一致
    6 print(frame)
    7 # 指定columns参数重新排序,格式list,如果没有该列,用NaN填充
    8 #  指定index 重新定义行索引,格式list,长度一致
    View Code

    6.2.2 由Series组成的字典创建

     1 data1 = {'one':pd.Series(np.random.rand(2)),
     2         'two':pd.Series(np.random.rand(3))}  # 没有设置index的Series
     3 data2 = {'one':pd.Series(np.random.rand(2), index = ['a','b']),
     4         'two':pd.Series(np.random.rand(3),index = ['a','b','c'])}  # 设置了index的Series
     5 print(data1)
     6 #print(data2)
     7 df1 = pd.DataFrame(data1)
     8 df2 = pd.DataFrame(data2)
     9 print(df1)
    10 print(df2)
    11 # 由Seris组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是默认数字标签)
    12 # Series可以长度不一样,生成的Dataframe会出现NaN值
    View Code

    6.2.3 通过二维数组直接创建

    1 ar = np.random.rand(9).reshape(3,3)
    2 print(ar)
    3 df1 = pd.DataFrame(ar)
    4 df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three'])  # 可以尝试一下index或columns长度不等于已有数组的情况
    5 print(df1)
    6 print(df2)
    7 # 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式
    8 # index和colunms指定长度与原数组保持一致
    View Code

    6.2.4 由字典组成的列表创建

     1 data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
     2 print(data)
     3 df1 = pd.DataFrame(data)
     4 df2 = pd.DataFrame(data, index = ['a','b'])
     5 df3 = pd.DataFrame(data, columns = ['one','two'])
     6 print(df1)
     7 print(df2)
     8 print(df3)
     9 # 由字典组成的列表创建Dataframe,columns为字典的key,index不做指定则为默认数组标签
    10 # colunms和index参数分别重新指定相应列及行标签
    View Code

    6.2.5 由字典组成的字典创建

     1 data = {'Jack':{'math':90,'english':89,'art':78},
     2        'Marry':{'math':82,'english':95,'art':92},
     3        'Tom':{'math':78,'english':67}}
     4 df1 = pd.DataFrame(data)
     5 print(df1)
     6 # 由字典组成的字典创建Dataframe,columns为字典的key,index为子字典的key
     7 
     8 df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob'])
     9 df3 = pd.DataFrame(data, index = ['a','b','c'])
    10 print(df2)
    11 print(df3)
    12 # columns参数可以增加和减少现有列,如出现新的列,值为NaN
    13 # index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)
    View Code
  • 相关阅读:
    BZOJ1443 [JSOI2009]游戏Game
    BZOJ4950 [Wf2017]Mission Improbable
    假期编程
    假期编程
    假期编程
    假期编程
    假期编程练习-求和
    假期编程练习——一个数的n次幂取余
    假期编程练习———十进制转二进制
    小球抛物线运动
  • 原文地址:https://www.cnblogs.com/gt92/p/11725657.html
Copyright © 2011-2022 走看看