zoukankan      html  css  js  c++  java
  • python之pandas入门操作

    本文章是建议入门者直接上手操作,在操作中再去想为什么,是什么?

    --理论知识暂时不写了,可自行百度 ,跟着代码来入门,简单粗暴。

    import pandas as pd
    import numpy as np
    from pandas import Series,DataFrame
    
    #数据结构:Series 和DataFrame
    
    #Series 是一个定长的字典序列  定长:相当于两个ndarray
    #Series有两个基本属性:index和values   index默认0,1,2...递增  可以自定义索引如: index=['a','b'..]
    x1 = Series([1,2,3,4])
    # print(x1)
    x2 = Series(data=[1,2,3,4],index=['a','b','c','d'])
    # print(x2)
    
    #也可用字典的方式来创建Series
    d = {'a':1,'b':2,'c':3,'d':4}
    x3 = Series(d)
    # print(x3)
    
    #DataFrame 类型数据结构-类似数据库表——包含了行索引和列索引
    data = {'chinese':[66,95,93,90,80],'English':[65,85,92,88,90],'Math':[30,98,96,77,90]}
    df1 = DataFrame(data)
    # print(df1)
    #设置行索引index  以及列索引columns
    df2 = DataFrame(data,index=['ZhangFei','GuanYu','ZhaoYun','HuangZhong','DianWei'],columns=['English','Math','chinese'])
    # print(df2)
    """
    df1 结果
      chinese  English  Math
    0       66       65    30
    1       95       85    98
    2       93       92    96
    3       90       88    77
    4       80       90    90
    
    df2结果
                English  Math  chinese
    ZhangFei         65    30       66
    GuanYu           85    98       95
    ZhaoYun          92    96       93
    HuangZhong       88    77       90
    DianWei          90    90       80
    """
    
    #了解了基本的Series和DataFrame两个数据结构后,我们从数据处理的流程来继续学习使用方法
    
    #数据的导入和输出
    #pandas允许直接从xlsx,csv文件中导入数据,也可输出到xlsx,csv中
    #xlsx excel文件自行准备
    score = DataFrame(pd.read_excel('pandas_data.xlsx'))
    # score.to_excel('data1.xlsx')
    # df2.to_excel('data1.xlsx')
    #pip install openpyxl
    #pip install pandas
    # print(score)
    
    
    #数据清洗
    # drop()删除不需要的行或列
    # df2 = df2.drop(index=['ZhangFei'])
    # df2 = df2.drop(columns=['chinese'])
    # print(df2)
    
    # rename重命名列名 columns,  rename(columns=new_name,inplace=True)
    # df2.rename(columns={'chinese':'Yuwen','English':'Yingyu'},inplace=True)
    # print(df2)
    
    #去重复的值 drop_duplicates() 自动去重行
    data1 = {'chinese':[66,66,95,93,90,80],'English':[65,65,85,92,88,90],'Math':[30,30,98,96,77,90]}
    df3 = DataFrame(data1,index=['ZhangFei','ZhangFei','GuanYu','ZhaoYun','HuangZhong','DianWei'],columns=['English','Math','chinese'])
    df3 = df3.drop_duplicates()
    # print(df3)
    
    #格式问题---更改数据格式--astype()
    #eg:将chinese字段值改成str或者int64类型
    df3['chinese'].astype('str')
    # import numpy as np
    # df3['chinese'].astype(np.int64)
    # print(df3)
    
    #数据间的空格--先把格式转换成str类型,strip函数去空格 map()映射
    # df3['chinese']=df3['chinese'].map(str.strip)
    # #删除左空格
    # df3['chinese']=df3['chinese'].map(str.lstrip)
    # #右空格
    # df3['chinese']=df3['chinese'].map(str.rstrip)
    # #特殊字符
    # df3['chinese']=df3['chinese'].map(str.rstrip('$'))
    
    #大小写转换
    #
    df3.columns=df3.columns.str.upper()
    #
    df3.columns=df3.columns.str.lower()
    #首字母大写
    df3.columns=df3.columns.str.title()
    
    # 查找空值  空值NAN  isnull()
    df3.isnull()  #对应字段 返回True或Flask
    
    #apply函数对数据进行清洗--使用频率较高
    #eg:大小写转化
    # apply(str.upper)
    df4 = DataFrame(data={'name':'ZhangSan'},index=['1'])
    # print(df4)
    df4['name'] = df4['name'].apply(str.upper)
    # print(df4)
    #apply也可定义函数在apply中使用 apply(func)
    
    
    
    #数据统计
    #如果有遇到控制NaN会自动排除
    #min()  max()   sum()  mean() 平均值
    #median() 中位数  var()方差  std()标准差
    #argmin()统计最小值的索引位置  argmax()统计最大值的索引位置
    #idmin() 统计最小值的索引值    idxmax()统计最大值的索引值
    
    ######统计函数千千万,describe()函数最便捷  统计大礼包。。
    df6 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
    # print(df6.describe())
    # print(df6)
    """
              data1
    count  5.000000
    mean   2.000000
    std    1.581139
    min    0.000000
    25%    1.000000
    50%    2.000000
    75%    3.000000
    max    4.000000
    """
    
    #数据合并
    #将多个渠道源的多个数据库表进行合并,
    #一个DataFrame为一个数据表内容  两个合并使用merge()
    df7 = DataFrame({'name':['Zhangfei','lisi','zhangsan,','a']})
    df8 = DataFrame({'name':['Zhangfei','lisi','a,','a']})
    
    #基于指定列进行连接---健的交集
    # df9 = pd.merge(df7,df8,on='name')
    #inner内连接内链接是 merge 合并的默认情况,inner 内连接也为健交集
    df9 = pd.merge(df7,df8,how='inner')
    # print(df9)
    
    #如何用SQL方式打开Pandas
    #可以直接使用sql语句来操作pandas
    from pandasql import sqldf,load_meat,load_births
    df10 = DataFrame({'name':['ZhangFei','GuanYu','a','b','c'],'data1':range(5)})
    #将sql作为参数传入匿名函数中  sql参数, 设置globals全局参数
    pydf10 = lambda sql:sqldf(sql,globals())
    sql = "select * from df10 where name='ZhangFei'"
    
    print(pydf10(sql))
    
    
    
    """
    Pandas中有Series和DataFrame两种重要的数据结构。
        Series:是一个定长的字典序列。有两个基本属性:index,values
        DataFrame:类似于数据库表的一种数据结构。我们甚至可以像操作数据库表那样对DataFrame数据进行
        连接,合并,查询等等
        常用DataFrame进行数据清晰:用到的发方法有:
            - describe() 统计性描述
            - drop_duplicates() 删除重复行
            - rename(columns=...) 更名
            - dropna() 删除具有空的行
            - isnull() 判断空值
            - fillna() 填充空值 
            - apply() 应用函数
            - merge() 合并df
            - value_counts() 统计某列的各类型个数
            - read_excel() to_excel() 读取和保存excel
            - set_index() 设置索引
            - cut 分组
    
    """
  • 相关阅读:
    《剑指offer》-判断平衡二叉树
    《剑指offer》-前n项和不准用通解和各种判断
    《剑指offer》-统计整数二进制表示中1的个数
    《剑指offer》-双栈实现队列
    《剑指offer》-数组乘积,不使用除法
    《剑指offer》-青蛙跳台阶II
    gradle入门(1-8)gradle 的依赖查看、依赖排除和指定版本(需要验证!)
    groovy入门(2-1)Groovy的Maven插件安装:Plugin execution not covered by lifecycle configuration
    zuul入门(4)zuul的注解@EnableZuulServer和@EnableZuulProxy
    zuul入门(2)zuul的过滤器分类和加载
  • 原文地址:https://www.cnblogs.com/HugJun/p/11107297.html
Copyright © 2011-2022 走看看