zoukankan      html  css  js  c++  java
  • 数据分析库Pandas

    Pandas介绍

    导入pandas库

    import pandas as pd
    

    读取CSV文件

    df = pd.read_csv('file_name')  #注意文件路径 
    

    读取前几条数据

    df.head(num)  #num默认值是5,可以自己指定
    

    返回当前文件的信息

    df.info()
    df.index
    df.columns
    df.dtypes
    df.values
    

    注意:Pandas的处理对象是DataFrame结构

    创建一个dataframe结构

    data = {‘name’:['wemo', 'azhu', 'john'],'age':[23, 18, 30]}
    df_data = pd.DataFrame(data)
    

    取指定的数据

    age = df['Age']
    age[:5] #取出前五个年龄的值
    

    指定索引读取数据

    df = df.set_index('Name')
    df.head()
    

    得到数据的基本统计特性

    df.describle()
    

    pandas索引

    df[['Age','Fare']][:5]
    

    iloc和loc的不同了:loc是根据dataframe的具体标签选取列,而iloc是根据标签所在的位置,从0开始计数

    df.iloc[0:5, 1:3]
    df.set_index('Name').loc['wemo, azhu', 'Fare']
    

    bool类型的索引

    df['Fare'] > 40  #返回的是True or False
    df[ df['Fare'] > 40]  #通过bool类型索引返回票价大于40的数据
    (df.['Age'] > 70).sum()  #统计年龄大于70的人数
    

    groupby操作

    import pandas as pd
    df = pd.DataFrame({'key':['A', 'B', 'C', 'A', 'B', 'C'], 'data':[0, 5, 10, 5, 10, 15, 10, 15, 20]})
    #进行分类统计操作
    for key in ['A', 'B', 'C']:
         print(df[df['key']==key].sum())
    #下面通过groupby来实现上面代码的功能
    df.groupby('key').sum(()
    

    groupby的应用

    df.groupby('Sex')['Age'].mean()  #统计男女性别的年龄平均数
    

    数值运算

    进行数值计算的操作
    import pandas as pd
    df = pd.DataFrame([[1,2,3],[4,5,6]],index = ['a','b'],columns = ['A','B','C'])
    df.sum()  #默认按照第0维度计算
    df.sum(axis = 1)
    df.sum(axis = 'columns')
    df.mean(axis = 1)
    df.min()
    df.max()
    df.median()  #进行中位数计算
    df.cov()  #协方差
    df.corr()  #相关系数
    df['Age'].value_counts()  #统计某特征的值的分布
    df['Age'].value_counts(ascending = True,bins = 5)  #升序排列,bins表示平均分成五个区间
    

    对象操作

    Series结构的增删改查

    Series 是一维带标签的数组,它可以包含任何数据类型。包括整数,字符串,浮点数,Python 对象等。Series 可以通过标签来定位。

    定义一个Series结构

    data = [10,11,12]
    index = ['a','b','c']
    s = pd.Series(data = data,index = index)
    

    Series结构的查操作

    s[0]  #通过位置来查询,类似于numpy
    mask = [True,False,True]
    s[mask]  #通过布尔类型查询
    s.loc['b']    #通过标签查询,区别于numpy的地方
    s.iloc[1]    #通过位置查询
    

    Series结构的改操作

    s1['a'] = 100  #通过对标签赋值
    s1.replace(to_replace = 100,value = 101,inplace = True)  #inplace为True表示改变s1的值,默认为false不改变原series的值(需要进行赋值操作)
    s1.index = ['a','b','d']  #改变标签
    s1.rename(index = {'a':'A'},inplace = True)  #改变一个标签的值
    

    Series结构的增操作

    data = [100,110]
    index = ['h','k']
    s2 = pd.Series(data = data,index = index)
    s3 = s1.append(s2)  #直接append一组数据进来
    #
    s3['j'] = 500  #类似于字典添加键值对的操作
    #
    s1.append(s2,ignore_index = True)  #ignore_index表示是否重新创建索引(0-n),默认ignore_index = False
    

    Series结构的删操作

    del s1['A']  #类似字典操作
    s1.drop(['b','d'],inplace = True)
    

    DataFrame结构的增删改查

    DataFrame 是二维的带标签的数据结构。我们可以通过标签来定位数据。

    定义一个DataFrame结构

    data = [[1,2,3],[4,5,6]]
    index = ['a','b']
    columns = ['A','B','C']
    df = pd.DataFrame(data=data,index=index,columns = columns)
    

    查操作

    df['A']
    df.iloc[0]
    df.loc['a']
    

    改操作

    df.loc['a']['A'] = 150
    

    增操作

    df.loc['c'] = [1,2,3]
    df3 = pd.concat([df,df2],axis = 0)
    

    删操作

    df5.drop(['j'],axis=0,inplace = True)
    

    merge函数的操作

    res = pd.merge(left, right, on = ['key1', 'key2'],  on='key',how = 'outer', indicator = True)
    left:为DataFrame结构的对象,表示合并后位于左边
    right:为DataFrame结构的对象,表示合并后位于左边
    on:表示以什么为基准合并
    how:默认以交集的方式合并,outer指明以并集方式合并。还有可以以right/left为基准合并
    indicator:在合并后DataFrame结构中显示数据的来源
    result = left.join(right, on='key') #还有一个合并操作join,需要时细查文档
    

    数据显示设置

    http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html?highlight=set_option#pandas.set_option

    pd.set_option('display.max_rows',6)
    pd.set_option('display.precision',5)
    

    数据透视表

    数据透视表:可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据

    df.pivot_table(index = 'Sex',columns='Pclass',values='Fare',aggfunc='max')
    Pclass	1	2	3
    Sex			
    female	512.3292	65.0	69.55
    male	512.3292	73.5	69.55
    aggfunc默认是求平均值,也可以是计数count、求最大值max
    

    时间序列的操作

    import datetime
    dt = datetime.datetime(year=2018,month=4,day=23,hour=10,minute=30)
    print (dt)  #普通的时间操作
    output:2018-04-23 10:30:00
    
    #Pandas对时间序列的操作
    import pandas as pd
    ts = pd.Timestamp('2017-11-24')  #通过Timestamp是一种方式
    pd.to_datatime('2017-11-24')
  • 相关阅读:
    【BZOJ4300】绝世好题
    codeforce1051F
    【BZOJ3329】Xorequ
    codeforce739c
    【UVA11825】
    codeforce6E
    CF 1023D Array Restoration
    BZOJ 1911 [APIO2010] 特别行动队
    POJ 3709 K-Anonymous Sequence
    BZOJ 2726 [SDOI2012] 任务安排
  • 原文地址:https://www.cnblogs.com/wemo/p/8903996.html
Copyright © 2011-2022 走看看