• Python数据分析--Pandas知识点(二)


    13. 简单计算

    新建一个数据表df

    复制代码
    1 import pandas as pd
    2 
    3 df = pd.DataFrame({"地区": ["A区","B区", "C区"],
    4                    "前半年销量": [3500, 4500,3800],
    5                    "后半年销量": [3000, 6000,5000],
    6                    "单价": [10, 18, 15]})
    7 df
    复制代码

     13.1 加法计算

    有两种方式, 一种是利用add()函数: a.add(b) 表示a与b之和, 另一种是直接利用加法运算符号"+"

    1 #第一种方式: 利用add()函数
    2 # df["总销量"] = df["前半年销量"].add(df["后半年销量"])
    3 #第二种方式: "+"
    4 df["总销量"] = df["前半年销量"] + df["后半年销量"]
    5 df

     两者运算的结果都是相同的:

    对于累加求和上述两种方法同样适用, 还有一种方式就是采用apply()函数, 参考文档: https://blog.csdn.net/luckarecs/article/details/72869051

    这里介绍apply(func, axis = 0)函数的两个参数, apply()函数官方文档: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html?highlight=apply#pandas.DataFrame.apply

    第一个参数func就是指用于每行或者每列的函数, 这里将采用lambda函数: 接收任意多个参数并返回单个计算结果.

    第二个参数axis=0则表示计算行与行的数据, axis=1则表示计算列与列的数据

    1 #由于地区不能参与运算, 因此在df1数据表中删除地区
    2 df1 = df.drop(["地区","单价"], axis = 1, inplace = False)
    3 #对df1数据表进行累加运算, 随后添加到df表中.
    4 df["总销量"] = df1.apply(lambda x: x.sum(), axis = 1)
    5 df

    1 #删除地区和单价,分别计算前半年与后半年的三个地区总和.
    2 df2 = df.drop(["地区","单价"], axis = 1, inplace = False)
    3 #利用apply函数计算之后,添加至数据表中
    4 df.loc["Sum"] = df2.apply(lambda x: x.sum(), axis = 0 )
    5 df

    13.2 减法运算

    同样有两种方式: 一种是采用sub()函数, A.sub(B)表示A-B, 另一种是采用减法运算符 "-"

    1 #函数法: 注意A.sub(B)表示A-B
    2 df["销量增长"] = df["后半年销量"].sub(df["前半年销量"])
    3 #运算符: "-"
    4 df["销量增长"] = df["后半年销量"] - df["前半年销量"] 
    5 df

    两种方式, 同样的结果:

    13.3 乘法运算

     同样是两种方式: 一种是采用mul()函数: A.mul(B)表示: A与B之积, 另一种则是乘法运算符 "*"

    1 #函数法: A.mul(B)
    2 df["前半年销售额"] = df["前半年销量"].mul(df["单价"])
    3 #运算符: "*"
    4 df["后半年销售额"] = df["后半年销量"] * df["单价"]
    5 df

    13.4 除法运算

    同样是两种: 一种是采用div()函数: A.div(B)表示: A除以B, 第二种则是采用除法运算符"/"

    1 #函数法
    2 df["前半年销量1"] = df["前半年销量"].div(100)
    3 #运算符法
    4 df["前半年销量2"] = df["前半年销量"] / 1000
    5 df

     

    13.5 其他运算

    13.5.1 取整和取余

    1 #取整符号: "//"
    2 df["后半年销量1"] = df["后半年销量"] // 1000
    3 #取余符号: "%"
    4 df["前半年销量1"] = df["前半年销量"] // 100 % 10
    5 df

     

    13.5.2 聚合运算

    采用聚合函数对一组数据进行运算, 并返回单个值, 比如最大值max()函数, 最小值min()函数, 平均值mean()函数

    复制代码
    1 #求前半年销量最大值
    2 df1 = df["前半年销量"].max()
    3 #求后半年销量最小值
    4 df2 = df["后半年销量"].min()
    5 #求单价的平均值
    6 df3 = df["单价"].mean()
    7 df1, df2 ,df3
    复制代码
    (4500, 3000, 14.333333333333334)

    14. 0-1标准化

    0-1标准化是对原始数据进行线性变换, 使其结果映射成[0,1]区间的值, 计算公式为: 新数据 = (原数据 - 最小值) / (最大值 - 最小值)

    1 import pandas as pd
    2 df = pd.DataFrame({"地区": ["A区","B区", "C区", "D区", "E区", "F区"],
    3                    "销量": [3500, 4500,3800,3000, 6000,5000]})
    4 #利用公式对原始数据进行0-1标准化处理
    5 df["0-1"] = (df["销量"] - df["销量"].min()) / (df["销量"].max() - df["销量"].min())
    6 df

    15. 数据分组

    数据分组是根据统计研究的需求, 对原始数据按照某种标准划分为不同的组别. 主要目的是观察数据的分布特征. 在数据分组后再计算出各组中数据出现的的频数, 最终形成频数分布表.

    pandas中数据分组采用的函数是cut(x, bins, right = True, labels = None)函数:

    第一个参数x指的是要分组的数据

    第二个参数bins指的是划分标准, 也就是定义组的上限与下限

    第三个参数right = True表示右边闭合, 左边不闭合; 当right = False时表示右边不闭合, 左边闭合, 默认为True.

    第四个参数则是自定义分组的内容

    更多cut()函数相关参考官方文档: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html?highlight=cut#pandas.cut

    复制代码
    1 import pandas as pd
    2 df = pd.DataFrame({"地区": ["A区","B区", "C区", "D区", "E区", "F区", "G区"],
    3                    "单价": [ 8 , 20, 15, 7, 34, 25, 30]})
    4 #对单价进行编组: (5,15),(15,25),(25,35)
    5 bins = [5, 15, 25, 35]
    6 #利用cut()函数对单价进行分组, 并添加至原数据表中
    7 df["分组"] = pd.cut(df.单价, bins)
    8 df
    复制代码

    自定义labels:

    复制代码
    1 import pandas as pd
    2 df = pd.DataFrame({"地区": ["A区","B区", "C区", "D区", "E区", "F区", "G区"],
    3                    "单价": [ 8 , 20, 15, 7, 34, 25, 30]})
    4 bins = [5, 15, 25, 35]
    5 #自定义labels
    6 labels = ["15以下", "15到25", "25以上"]
    7 df["分组"] = pd.cut(df.单价, bins, labels = labels)
    8 df
    复制代码

     

    16. 日期转换

    日期转换是指将字符类型转换成日期格式.

    16.1 to_datetime方法

    可使用to_datetime(arg, format = None)函数转换

    第一个参数arg则是需要转化的字符串, 比如"2018/09/01"

    第二个参数format则是原字符串中日期的格式, 比如"2018/09/01"的格式为 "%Y/%m/%d"

    常用的格式有: %y表示两位数的年份, %Y表示四位数的年份, %m表示月份, %d表示月中的某一天, %H表示24小时制时数, %I表示12小时制时数, %M表示分钟, %S表示秒

    to_datetime()函数官方文档: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html?highlight=to_datetime#pandas.to_datetime

    1 import pandas as pd
    2 df = pd.DataFrame({"name":["A","B","D"],
    3                   "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]})
    4 #转成日期格式
    5 df["BD"] = pd.to_datetime(df.BirthDate,format = "%Y/%m/%d")
    6 df

     

    1 #查看数据类型
    2 df.dtypes

    16.2 datetime.strptime()方法

    借助datetime模块中datetime类的strptime()方法, 将字符类型转化为日期格式.

    strptime(date_string, format)方法中有两个参数, 第一个参数则是要转化的字符串, 第二个参数则为字符串中日期的格式

    复制代码
    1 import pandas as pd
    2 from datetime import datetime
    3 df = pd.DataFrame({"name":["A","B","D"],
    4                   "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]})
    5 #转化为日期格式
    6 df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d"))
    7 df
    复制代码

    17. 日期格式化

    日期格式化就是将日期按照指定的格式输出成字符类型, 这里借助datetime模块中datetime类的strftime()方法实现:

    复制代码
    1 import pandas as pd
    2 from datetime import datetime
    3 df = pd.DataFrame({"name":["A","B","D"],
    4                   "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]})
    5 #转化为日期格式
    6 df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d"))
    7 #日期格式化
    8 df["BD1"] = df["BD"].apply(lambda x: datetime.strftime(x, "%d-%m-%Y %H:%M:%S"))
    9 df
    复制代码

    18.日期抽取

    从日期格式中抽取日期的部分内容, 比如抽取年份, 月份等. 语法: 转换为日期格式的列.dt.要抽取的属性.

    复制代码
     1 import pandas as pd
     2 from datetime import datetime
     3 df = pd.DataFrame({"name":["A","B","D"],
     4                   "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]})
     5 df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d"))
     6 df["year"] = df["BD"].dt.year
     7 df["month"] = df["BD"].dt.month
     8 df["day"] = df["BD"].dt.day
     9 df["hour"] = df["BD"].dt.hour
    10 df["minute"] = df["BD"].dt.minute
    11 df["second"] = df["BD"].dt.second
    12 df["weekday"] = df["BD"].dt.weekday
    13 df
    复制代码

    原文来自:https://www.cnblogs.com/star-zhao/p/9715307.html

  • 相关阅读:
    Java并发之线程管理(线程基础知识)
    spring aop使用
    java动态代理
    java深拷贝与浅拷贝
    装饰模式(也叫包装模式)
    Spring基于XML方式的使用
    javaWeb域对象
    静态代理和动态代理
    getAnnotation的一个坑
    (转)文件上传org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/10018702.html
Copyright © 2020-2023  润新知