当前位置:   article > 正文

数据分析从入门到精通 2.pandas修真之前戏基础

数据分析从入门到精通 2.pandas修真之前戏基础

从爱上自己那天起,人生才真正开始

                                                        —— 24.5.6

为什么学习pandas

        numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?
        numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!

什么是pandas?

首先先来认识pandas中的两个常用的类
        Series
        DataFrame

Series类

Series是一种类似与一维数组的对象,由下面两个部分组成:

        values:一组数据(ndarray类型)
        index:相关的数据索引标签

Series的创建

        由列表创建

  1. from pandas import Series
  2. # Series的创建
  3. # 由列表创建
  4. s1 = Series(data=[1,2,3,"four"])
  5. print(s1)
  6. print("——————————————————————————————————————")

        由numpy数组创建

  1. # 由numpy数组创建
  2. import numpy as np
  3. s2 = Series(data=np.random.randint(0,100,size=(3)))
  4. print(s2)
  5. print("——————————————————————————————————————")

index参数用来指定显示索引的 默认的0,1,2,3为隐式索引

  1. # index参数用来指定显示索引的 默认的0,1,2,3为隐式索引
  2. s3 = Series(data=[1,2,3,"four"],index=['a','b','c','d'])
  3. print(s3)
  4. print("——————————————————————————————————————")


        由字典创建

        为什么需要有显示索引?

                显示索引可以增强series的可读性

  1. # 由字典创建
  2. dic = {
  3. '语文':99,
  4. '数学':100,
  5. '英语':100
  6. }
  7. s4 = Series(data=dic)
  8. print(s4)
  9. print("——————————————————————————————————————")

Seires的索引和切片

  1. dic = {
  2. '语文':99,
  3. '数学':100,
  4. '英语':100
  5. }
  6. s4 = Series(data=dic)
  7. print(s4)
  8. print("——————————————————————————————————————")
  9. # 索引
  10. print(s4[0])
  11. print(s4.语文)
  12. # 切片
  13. print(s4[0:2])

Series的常用属性

        shape:返回数组的形状

        size:返回数组元素的个数

        index:返回数组的索引

        values:返回存储的元素值

  1. # shape:返回数组的形状 ize:返回数组元素的个数 index:返回数组的索引 values:返回存储的元素值
  2. s = Series(data=[1,1,4,"一切都会好的","我一直相信"])
  3. print(f"s.shape={s.shape}")
  4. print(f"s.size={s.size}")
  5. print(f"s.index={s.index}")
  6. print(f"s.values={s.values}")
  7. print(f"s.dtype={s.dtype}")

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

​Series的常用方法

        head(),tail()

  1. # 导包
  2. import numpy as np
  3. from pandas import Series
  4. # 创建Series数组对象
  5. s = Series(data=np.random.randint(60,100,size=(10,)))
  6. # head() 显示前n个数组元素,n默认为5
  7. print(f"s={s}")
  8. print(f"s.head()={s.head()}") # 显示数组中前n个对象,默认n是5
  9. print("s.head(2)={s.head(2)}")
  10. print("——————————————————————————————————————")
  11. # tail() 显示后n个数组元素,n默认为5
  12. print(f"s={s}")
  13. print(f"s.tail()={s.tail()}") # 显示数组中后n个对象,默认n是5
  14. print("s.tail(2)={s.tail(2)}")
  15. print("——————————————————————————————————————")

        unique()

  1. # 导包
  2. import numpy as np
  3. from pandas import Series
  4. # 创建Series数组对象
  5. s = Series(data=np.random.randint(60,100,size=(10,)))
  6. # unique()去重,去除重复的数据
  7. print(f"s={s}")
  8. print(f"s.unique()={s.unique()}")
  9. print("——————————————————————————————————————")

 

        isnull(),notnull()

  1. # 导包
  2. import numpy as np
  3. from pandas import Series
  4. # 创建Series数组对象
  5. s = Series(data=np.random.randint(60,100,size=(10,)))
  6. # isnull 用于判断每个元素是否为空 如果为空返回true,否则返回false
  7. print(f"s.isnull()={s.isnull()}")
  8. print("——————————————————————————————————————")
  9. # notnull 用于判断每个元素是否不为空 如果不为空返回true,否则返回false
  10. print(f"s.notnull()={s.notnull()}")
  11. print("——————————————————————————————————————")

        add()加法、 sub()减法、 mul()乘法、 div()除法

Seriese的算术法则

        —— 法则:索引一致的元素进行算术运算否则补空

DataFrame类

DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
        行索引:index
        列索引:columns
        索引所对的值:values

DataFrame的创建

        ndarray创建

  1. # 导包
  2. from pandas import DataFrame
  3. import numpy as np
  4. # DataFrame的创建
  5. # ndarray创建
  6. df1 = DataFrame(data=[[1,2,3],[4,5,6]])
  7. print(df1)
  8. df2 = DataFrame(data=np.random.randint(0,100,size=(6,4)))
  9. print(df2)

        字典创建

  1. # DataFrame的创建
  2. # 字典创建
  3. dic = {
  4. 'name':["张三","李四","王老五"],
  5. "salary":[1000,2000,3000]
  6. }
  7. df3 = DataFrame(data=dic)
  8. print(df3)

DataFrame的属性

        values: 二维数组存储的数据

        columns:返回列索引

        index:返回行索引

        shape:返回形状(几行几列)

  1. # 导包
  2. from pandas import DataFrame
  3. import numpy as np
  4. # DataFrame的创建
  5. # ndarray创建
  6. df = DataFrame(data=np.random.randint(0,100,size=(6,4)))
  7. print(df)
  8. print(df.values)
  9. print(df.index)
  10. print(df.columns)
  11. print(df.shape)
  12. print(df.dtypes)

练习

根据以下考试成绩表,创建一个DataFrame,命名为df:
                张三 李四

        语文 150     0
        数学 150     0
        英语 150     0
        理综 300     0

  1. # 导包
  2. from pandas import DataFrame
  3. import numpy as np
  4. dic = {
  5. "张三":[150,150,150,300],
  6. "李四":[0,0,0,0]
  7. }
  8. df = DataFrame(data=dic,index=["语文","数学","英语","理综"])
  9. print(df)

DataFrame索引操作

        对行进行索引,取列

  1. # 导包
  2. from pandas import DataFrame
  3. import numpy as np
  4. # DataFrame索引操作
  5. # 创建数据源
  6. # 行索引是显示的,列索引是隐式的 列索引是显示的:a、b、c、d
  7. df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
  8. print("取单列:")
  9. # 对行进行索引
  10. # 取单列,如果df有显示的索引,通过索引机制取行或者列的时候只能使用显示索引
  11. print(df['a'])
  12. print("——————————————————————————————————————")
  13. # 用隐式索引取单列
  14. print("隐式索引取单列")
  15. print(df.iloc[0])
  16. print("——————————————————————————————————————")
  17. # 取多列 需要两个中括号
  18. print("取多列:")
  19. print(df[['a','b','c']])
  20. print("——————————————————————————————————————")
  21. # 通过隐式索引取列
  22. print("隐式索引取列:")
  23. print(df.iloc[0])
  24. print("——————————————————————————————————————")

        对列进行索引,取行

  1. # 导包
  2. from pandas import DataFrame
  3. import numpy as np
  4. # DataFrame索引操作
  5. # 创建数据源
  6. # 行索引是显示的,列索引是隐式的 列索引是显示的:a、b、c、d
  7. df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
  8. # 对列进行索引
  9. # 隐式索引取单行
  10. print("隐式索引取单行:")
  11. print(df.iloc[0])
  12. print("——————————————————————————————————————")
  13. # 取多行 需要两个中括号
  14. # 隐式索引取多行
  15. print("隐式索引取多行:")
  16. print(df.iloc[[0,3,5]])
  17. print("——————————————————————————————————————")
  18. # 显示索引取单行
  19. print("显式索引取单行:")
  20. print(df.loc[0])
  21. # 显示索引取多行
  22. # 由于数组没有显示索引,所以iloc和loc都可以求隐式索引,如果数组中有显示索引,loc后面只能跟显示索引不能跟隐式索引
  23. print("显式索引取多行:")
  24. print(df.iloc[[0,3,5]])
  25. print("——————————————————————————————————————")

      对元素进行索引

  1. # 导包
  2. from pandas import DataFrame
  3. import numpy as np
  4. # DataFrame索引操作
  5. # 创建数据源
  6. # 行索引是显示的,列索引是隐式的 列索引是显示的:a、b、c、d
  7. df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
  8. # 对元素进行索引
  9. print("对元素进行索引")
  10. print("取单个元素")
  11. print(df.iloc[0,2])
  12. print(df.loc[0,'a'])
  13. print("——————————————————————————————————————")
  14. print("取多个元素")
  15. print(df.iloc[[1, 3, 5], 2])

—— iloc:

        通过隐式索引取行

—— loc:

        通过显示索引取行

总结

df索引和切片操作

        索引:
                df[col]:取列
                df.loc[index]:取行
                df.iloc[index,col]:取元素

        切片:
                df[index1:index3]:切行

                df.iloc[:,col1:col3]:切列

DataFrame的运算

        —— 同Series运算一致

        —— 法则:索引一致的元素进行算术运算否则补空

        add()加法、 sub()减法、 mul()乘法、 div()除法

练习

1.假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
2.假设张三期中考试数学被发现作弊,要记为0分,如何实现?
3.李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
4.后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?

  1. # 导包
  2. from pandas import DataFrame
  3. dic = {
  4. "张三":[150,150,150,150],
  5. "李四":[0,0,0,0]
  6. }
  7. # 根据字典创建数组
  8. df=DataFrame(data=dic,index=["语文","数学","英语","理综"])
  9. # 期中考试
  10. MidTest = df
  11. # 期末考试
  12. LastTest = df
  13. # 期中+期末的平均值
  14. print((MidTest+LastTest)/2)
  15. # 张三期中作弊了,将数学分数改为0
  16. MidTest.loc["数学","张三"] = 0
  17. print(MidTest)
  18. # 李四举报张三,将李四所有成绩+100
  19. MidTest["李四"] += 100
  20. print(MidTest)
  21. # 后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分
  22. MidTest += 10
  23. print(MidTest)

时间数据类型的转换

pd.to_datetime(col)将某一列

  1. # 导包
  2. from pandas import DataFrame
  3. import pandas as pd
  4. dic = {
  5. 'time':["2010-10-10","2011-11-20","2020-1-10"],
  6. "temp":[33,31,30]
  7. }
  8. df = DataFrame(data=dic)
  9. print(df)
  10. # 查看time列的类型
  11. print(df["time"].dtype)
  12. print("————————————————————————————————————")
  13. # 将time列的数据类型转换成时间序列类型
  14. df['time'] = pd.to_datetime(df["time"])
  15. print(df)
  16. print(df['time'].dtype)
  17. print("————————————————————————————————————")

设置为行索引

df.set_index(

  1. # 导包
  2. from pandas import DataFrame
  3. import pandas as pd
  4. dic = {
  5. 'time':["2010-10-10","2011-11-20","2020-1-10"],
  6. "temp":[33,31,30]
  7. }
  8. df = DataFrame(data=dic)
  9. print(df)
  10. # 将time列作为原数据的行索引,替换10,1,2
  11. df.set_index('time', inplace=True)
  12. print(df)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/564147
推荐阅读
相关标签
  

闽ICP备14008679号