zoukankan      html  css  js  c++  java
  • pandas基础学习

    1、导入两个数据分析重要的模块
    import numpy as np
    import pandas as pd
    2、创建一个时间索引,所谓的索引(index)就是每一行数据的id,可以标识每一行的唯一值
    dates = pd.date_range('20161024',periods=6)
    3、创建一个6X4的数据:randn函数用于创建随机数,参数表示行数和列数,dates是上一步创建的索引列
    df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
    4、使用字典来创建数据框,例如创建一个列名为A的数据框,索引不加则是自动创建的整数
    例子1:df = pd.DataFrame({'A':np.random.randn(6)})
    例子2:df = pd.DataFrame({'A':pd.Timestamp('20161024'),'B':pd.Series(1)})
    假如字典内的数据长度不同,以最长的数据为准,比如B列有4行
    df = pd.DataFrame({'A':pd.Timestamp('20161024'),'B':pd.Series(1,index=list(range(4)))})
    5、查看数据
    print(df.dtypes) #查看数据格式
    print(df) #查看所有数据
    print(df.head()) #查看指定前几行的数据,默认是前5行
    print(df.tail()) #查看指定前几行的数据,默认是后5行
    print(df.index) #查看数据索引
    print(df.columns) #查看数据列名
    print(df.values) #查看数据值
    print(df.describe) #查看描述性统计
    6、使用T来转置数据,也就是行列转换
    print(df.T)
    7、对数据进行排序,用到了sort,参数可以指定根据哪一列数据进行排序。

    df = pd.DataFrame({'A':(22,44,33,11),'B':(111,222,333,444)})
    print(df.sort(columns='A'))

     8、数据的选择,选择数据就是用到了切片和loc、at方法
    df['A']  选择A列的操作
    df[1:3]  还可以使用数组的切片操作,但是注意了,切片得到的是行数据,如果你想使用这个方法得到列,那就会出现错误
    df['20161026':'20161028']  可以使用行标签来指定输出的行,类似于切片
    df.loc[dates[0]]  DataFrame的loc方法是帮助选择数据的,比如选择索引位置为0的一行数据(注意我们是用dates作为索引的)
    df.loc[:,['A','B']]  选择多列数据的写法
    df.loc['20161026':'20161028',['A','B']]  选择局部数据,是行和列的交叉区域
    df.loc[dates[0],'A']  只选择某一个数据,可以指定行和列
    df.loc[dates[0],'A']  at方法是专门用于获取某个值的

    9、DataFrame切片操作
    df.iloc[3]  使用iloc方法,提取第四行数据
    df.iloc[3:5,0:2]  返回4-5行,1-2列数据
    df.iloc[[1,2,4],[0,2]]  可以提取不连续行和列的数
    df.iloc[1:3,:]  提取某一样或者某几行的数据,保证所有列都在,可以使用一个冒号来表示所有列
    df.iloc[:,1:3]  所有行,也可以用冒号来表示
    df.iloc[1,1]  提取某一个值,去掉所有冒号,比如取第2行第2列的这个数
    df.iat[1,1]  iat是专门提取某个数的方法,它的效率高更高,因此建议在提取单个数的时候用iat

     10、Dataframe筛选数据
    df[df.D>0]  筛选D列数据中大于0的行
    df[(df.D>0)&(df.C<0)]  使用&符号可以实现多条件筛选,当然是用"|"符号也可以实现多条件,只不过他是或的关系。
    df[['A','B']][(df.D>0)&(df.C<0)]  我们只需要A和B列数据,而D和C列数据都是用于筛选的,可以这样写:只返回了AB两列数据
    可以使用insin方法来筛选特定的值:
    alist = [0.05397,0.687087,0.36545]
    print(df['D'].isin(alist))

    11、单列数据格式的转换
    df = pd.read_csv('000917.csv',encoding='gbk')
    df = df[df['涨跌幅']!='None']
    df['涨跌幅'] = df['涨跌幅'].astype(np.float64)
    print(type(df.loc[2,'涨跌幅']))
    12、统计名称的个数
    df = pd.read_csv('000917.csv',encoding='gbk')
    df = df[df['涨跌幅']!='None']
    df['涨跌幅'] = df['涨跌幅'].astype(np.float64)
    t = df['名称'].value_counts()
    print(t)
    ##电广传媒 3519
    ##G 电 广 193
    ##电广实业 158
    ##Name: 名称, dtype: int64

     12、操作多索引MultiIndex

    # -*- coding: utf-8 -*-
    import os
    import pandas as pd
    import numpy as np
    
    #建立一个带二重索引的DataFrame
    
    df = pd.DataFrame()
    df['a'] = list(range(10,30,2))
    df['b'] = df['a'] // 10
    
    df.index.name = 'id'
    df = df.set_index([df['b'],df.index],drop=False)
    
    #对带多重索引的dataframe取值一般使用xs
    
    df = df.xs(1,level='b')
    
    #选取第一级b=2,id=6
    #df.xs((2,6))
    #使用PD.IndexSlice可以更花式的
    #这里因为使用的是loc,所以返回的是引用,可以修改原值 
    #IndexSlice中,每一级的index都要有对应的取值,全取则用”:”
    #idx['b','id']
    #idx = PD.IndexSlice
    #df.loc[idx[:,[1,3,8]],'a']
    
    print(df)

    13、数据分组,数据分组的好处是你可以一次性计算得到所有分组中的统计量,比如想计算男女学生的平均成绩分别是多少
    grouped = df.groupby('A') 对A列进行分组
    grouped = df.groupby(['A','B']) 对A列和B列同时进行分组
    14、字符串操作
    s = pd.Series(list('ABCDEF'))
    print(s.str.lower()) 转换小写
    print(s.str.upper()) 转换大写
    print(s.str.len()) 求长度

    s = pd.Series(['a_b_c','c_a_b',np.nan,'f_g_h']) 切割字符串,转换成list
    print(s.str.split('_'))

    print(s.str.split('_').str.get(1)) 使用get方法获得列中的某个元素
    print(s.str.replace('^a|b$','X',case=False)) 使用replace,replace的第一个参数是正则表达式,第二个参数是要替换成的字符串。
    14、字符串提取数据
    s = pd.Series(['a1','a2','b1','b2','c3','c'])
    print(s.str.extract('[ab](d)')) 提取一个
    print(s.str.extract('([abc])(d)')) 提取多个
    print(s.str.extract('([abc])(d)?')) 你要灵活使用问号,它表示可有可无,下面的方式可以匹配字符“c”
    s.str.extract('(?P<letter>[abc](?P<digit>d)') 输出的结果包含变量名(列名)

    15、填充缺失值
    df.fillna(0) 使用0替代缺失值
    df.fillna('missing') 用一个字符串代替缺失值
    df.fillna(method='pad') 用前一个数据代替NaN:method='pad'
    df.fillna(method='bfill',limit=1) 用后一个数据代替
    df.fillna(df.mean()) 使用平均数或者其他描述性统计量来代替NaN
    df.fillna(df.mean()['one','two']) 可以选择哪一列进行缺失值的处理
    16、删除缺失数据
    df.dropna(axis=0) 选择删除行,使用参数axis=0,这是最常用的方法
    df.dropna(axis=1) 选择删除列
    17、值替换
    df.replace(0,6) 将0替换为6
    df.replace([0,1,2,3,4,5],[5,4,3,2,1,0]) 列表到列表的替换
    df.replace({1:11,2:12}) 使用字典映射:将1替换为11,将2替换为12
    方法可以用在列上

  • 相关阅读:
    代码守恒定律
    第一个Dockerfile
    服务器项目白名单设置
    TOMCAT禁用不安全请求方式
    标准单例模式
    二进制,八进制,十进制,十六进制!!!!
    JAVA按层级遍历二叉树
    String的+
    安装 Rational Rose 启动报错:无法启动此程序,因为计算机中丢失 suite objects.dll
    java中文乱码问题
  • 原文地址:https://www.cnblogs.com/wumac/p/5992155.html
Copyright © 2011-2022 走看看