• Python的Pandas库(二)进阶使用


    Python开发实用教程

    DataFrame的运算

    DataFrame重载了运算符,支持许多的运算

    算术运算

    运算方法运算说明
    df.add(other)对应元素的加,如果是标量,就每个元素加上标量
    df.radd(other)等效于other+df
    df.sub(other)对应元素相减,如果是标量,就每个元素减去标量
    df.rsub(other)other-df
    df.mul(other)对应元素相乘,如果是标量,每个元素乘以标量
    df.rmul(other)other*df
    df.div(other)对应元素相除,如果是标量,每个元素除以标量
    df.rdiv(other)other/df
    df.truediv(other)对应元素相除,如果是标量,每个元素除以标量
    df.rtruediv(other)other/df
    df.floordiv(other)对应元素相除取整,如果是标量,每个元素除以标量
    df.rfloordiv(other)other//df
    df.mod(other)对应元素相除取余,如果是标量,每个元素除以标量
    df.rmod(other)other%df
    df.pow(other)对应元素的次方,如果是标量,每个元素的other次方
    df.rpow(other)other**df
    1. import pandas as pd
    2. df1 = pd.DataFrame({'c1':[1,2,3,4],'c2':[5,6,7,8],'c3':[10,11,12,13]})
    3. df2 = pd.DataFrame({'c1':[11,12,13,14],'c2':[10,20,30,40],'c3':[100,200,300,400]})
    4. df3 = df1 + df2
    5. print(df3)
    6. ‘’'
    7. c1 c2 c3
    8. 0 12 15 110
    9. 1 14 26 211
    10. 2 16 37 312
    11. 3 18 48 413
    12. ‘''
    13. df4 = pd.DataFrame({'c1':[11,12,13,14]})
    14. df5 = df1 + df4
    15. print(df5)
    16. ‘’'
    17. c1 c2 c3
    18. 0 12 NaN NaN
    19. 1 14 NaN NaN
    20. 2 16 NaN NaN
    21. 3 18 NaN NaN
    22. ‘’'
    23. df6 = df1 + 1
    24. print(df6)
    25. ‘’'
    26. c1 c2 c3
    27. 0 2 6 11
    28. 1 3 7 12
    29. 2 4 8 13
    30. 3 5 9 14
    31. ''
    32. df7 = df1 -2
    33. print(df7)
    34. ‘’'
    35. c1 c2 c3
    36. 0 -1 3 8
    37. 1 0 4 9
    38. 2 1 5 10
    39. 3 2 6 11
    40. ‘''
    41. df8 = 2 - df1
    42. print(df8)
    43. ‘’'
    44. c1 c2 c3
    45. 0 1 -3 -8
    46. 1 0 -4 -9
    47. 2 -1 -5 -10
    48. 3 -2 -6 -11
    49. ''

     比较运算

    比较运算如果是标量,就是每个元素与标量的比较,如果是两个形状一样的DataFrame,生成一个每个元素对应比较的DataFrame。

    运算方法运算说明
    df.lt(other)对应元素进行小于比较,生成一个新的形状相同的DataFrame,如果other是标量,每个元素和这个标量相比较
    df.gt(other)对应元素进行大于比较,生成一个新的形状相同的DataFrame,如果other是标量,每个元素和这个标量相比较
    df.eq(other)判断对应的元素是否相等,生成一个新的形状相同的DataFrame,如果other是标量,每个元素和这个标量相比较
    df.ne(other)判断应元素是否相等,如果不等为True,生成一个新的形状相同的DataFrame,如果other是标量,每个元素和这个标量相比较
    df.le(other)对应元素进行小于等于比较,生成一个新的形状相同的DataFrame,如果other是标量,每个元素和这个标量相比较
    df.ge(other)对应元素进行大于等于比较,生成一个新的形状相同的DataFrame,如果other是标量,每个元素和这个标量相比较
    1. df1 = pd.DataFrame({'c1':[1,2,3,4],'c2':[5,6,7,8],'c3':[10,11,12,13]})
    2. print(df1)
    3. ‘’‘
    4. c1 c2 c3
    5. 0 1 5 10
    6. 1 2 6 11
    7. 2 3 7 12
    8. 3 4 8 13
    9. ’‘’
    10. print(df1 == 2) #df1的每个元素是否等于2
    11. ‘’‘
    12. c1 c2 c3
    13. 0 False False False
    14. 1 True False False
    15. 2 False False False
    16. 3 False False False
    17. ’‘’
    18. print(df1%2 == 0) #与计算联合使用,每个元素是否为偶数
    19. ‘’‘
    20. c1 c2 c3
    21. 0 False False True
    22. 1 True True False
    23. 2 False False True
    24. 3 True True False
    25. ’‘’
    26. df2 = pd.DataFrame({'c1':[11,12,13,3],'c2':[6,6,6,6],'c3':[12,11,14,9]})
    27. print(df1 < df2)
    28. '''
    29. c1 c2 c3
    30. 0 True True True
    31. 1 True False False
    32. 2 True False True
    33. 3 False False False
    34. '''

    其他运算

    运算方法运算说明
    df.abs()对每个元素求绝对值

    DataFrame集合操作

    空值操作

    运算方法运算说明
    df.count()统计每列的非空值数量
    df.bfill()使用同一列中的下一个有效值填充NaN
    df.ffill()使用同一列中的上一个有效值填充NaN
    df.fillna(value)使用value填充NaN值

    df.isna()

    df.isnull()

    df.notna()

    df.notnull()

    检测每个元素是否为NaN,生成一个同形状的DataFrame
    1. df1 = pd.DataFrame({'c1':[1,2,3,None],'c2':[5,None,None,8],'c3':[10,12,None,16]})
    2. print(df1)
    3. print(df1.bfill())
    4. '''
    5. c1 c2 c3
    6. 0 1.0 5.0 10.0
    7. 1 2.0 NaN 12.0
    8. 2 3.0 NaN NaN
    9. 3 NaN 8.0 16.0
    10. c1 c2 c3
    11. 0 1.0 5.0 10.0
    12. 1 2.0 8.0 12.0
    13. 2 3.0 8.0 16.0
    14. 3 NaN 8.0 16.0
    15. '''
    16. print(df1.ffill())
    17. '''
    18. c1 c2 c3
    19. 0 1.0 5.0 10.0
    20. 1 2.0 5.0 12.0
    21. 2 3.0 5.0 12.0
    22. 3 3.0 8.0 16.0
    23. '''
    24. print(df1.fillna(0))
    25. '''
    26. c1 c2 c3
    27. 0 1.0 5.0 10.0
    28. 1 2.0 0.0 12.0
    29. 2 3.0 0.0 0.0
    30. 3 0.0 8.0 16.0
    31. '''

    运算方法运算说明
    df.all()返回一个Series,列出每个列的元素是否全部为真,一个列一个结果
    df.any()返回一个Series,列出每个列的元素是否任意一个为真,一个列一个结果
    df.clip(low,upper)返回一个Series,对每个元素与low和upper进行比较,如果小于low,使用low代替,如果大于upper,使用upper代替(可以理解为将超出范围的值设置为边界值)
    df.eval(expr)在列上执行表达式
    df.max()列出每列的最大值
    df.min()列出每列的最小值
    df.mean()列出每列的最平均值
    df.median()列出每列的中值
    df.sum()列出每列的元素和
    df.std()列出每列的标准差
    df.var()列出每列的方差
    df.head(n)列出前h行
    df.tail(n)列出后n行
    df.replace(to_replace,value)使用value替换to_repalace的元素,生成一个同形状的新DataFrame
    df.sort_value(by)按by指定的列进行排序,可以指定多列
    1. df1 = pd.DataFrame({'c1':[1,2,3,4],'c2':[5,None,None,8],'c3':[10,12,None,16]})
    2. print('df1.count():\n', df1.count())
    3. print('df1.max():\n', df1.max())
    4. print('df1.min():\n', df1.min())
    5. print('df1.mean():\n', df1.mean())
    6. print('df1.mean(axis=1):\n', df1.mean(axis=1))
    7. print('df1.sum():\n', df1.sum())
    8. print('df1.std():\n', df1.std())
    9. print('df1.var():\n', df1.var())
    10. '''
    11. df1.count():
    12. c1 4
    13. c2 2
    14. c3 3
    15. dtype: int64
    16. df1.max():
    17. c1 4.0
    18. c2 8.0
    19. c3 16.0
    20. dtype: float64
    21. df1.min():
    22. c1 1.0
    23. c2 5.0
    24. c3 10.0
    25. dtype: float64
    26. df1.mean():
    27. c1 2.500000
    28. c2 6.500000
    29. c3 12.666667
    30. dtype: float64
    31. df1.mean(axis=1):
    32. 0 5.333333
    33. 1 7.000000
    34. 2 3.000000
    35. 3 9.333333
    36. dtype: float64
    37. df1.sum():
    38. c1 10.0
    39. c2 13.0
    40. c3 38.0
    41. dtype: float64
    42. df1.std():
    43. c1 1.290994
    44. c2 2.121320
    45. c3 3.055050
    46. dtype: float64
    47. df1.var():
    48. c1 1.666667
    49. c2 4.500000
    50. c3 9.333333
    51. dtype: float64
    52. '''
    1. df1 = pd.DataFrame({'c1':[1,20,30,12],'c2':[50,45,55,38],'c3':[10,10,9,9]})
    2. print(df1)
    3. print(df1.sort_values(by=['c3', 'c1']))
    4. '''
    5. c1 c2 c3
    6. 0 1 50 10
    7. 1 20 45 10
    8. 2 30 55 9
    9. 3 12 38 9
    10. c1 c2 c3
    11. 3 12 38 9
    12. 2 30 55 9
    13. 0 1 50 10
    14. 1 20 45 10
    15. '''

    DataFrame读写文件

    方法名

    说明

    read_table(filepath_or_buffer, *[, sep, ...])

    从带分隔符的文件读取

    read_csv(filepath_or_buffer, *[, sep, ...])

    读csv格式文件

    DataFrame.to_csv([path_or_buf, sep, na_rep, ...])

    写csv格式文件

    read_fwf(filepath_or_buffer, *[, colspecs, ...])

    读固定宽度的格式文件

    read_excel(io[, sheet_name, header, names, ...])

    读excel文件

    DataFrame.to_excel(excel_writer[, ...])

    写excel文件

    ExcelFile(path_or_buffer[, engine, ...])

    用于将表格格式Excel工作表解析为DataFrame对象的类。

    ExcelFile.parse([sheet_name, header, names, ...])

    解析一个指定的sheet

    Styler.to_excel(excel_writer[, sheet_name, ...])

    写指定的sheet

    ExcelWriter(path[, engine, date_format, ...])

    用于写入Excel的类

    read_json(path_or_buf, *[, orient, typ, ...])

    从JSON格式读取数据

    DataFrame.to_json([path_or_buf, orient, ...])

    转为为JSON对象字符串

    read_html(io, *[, match, flavor, header, ...])

    从HTML表格读取数据

    DataFrame.to_html([buf, columns, col_space, ...])

    生成HTML表格

    Styler.to_html([buf, table_uuid, ...])

    生成HTML表格

  • 相关阅读:
    最新 robot framework安装
    编程刷题网站以及实用型网站推荐
    微信新功能,图片直接一键生成Excel表格
    python 编写m3u8视频格式下载小工具
    【Ubuntu20.04】使用 systemd 进行服务部署
    java(Map接口)
    分布式事务Seata源码解析11:全局事务执行流程之两阶段全局事务提交(手把手带你debug源码)
    L6.linux命令每日一练 -- 第二章 文件和目录操作命令 -- touch和ls命令
    middlebury立体匹配评估使用方法总结(一)
    代码随想录 - Day33 - 回溯:切割问题,子集问题
  • 原文地址:https://blog.csdn.net/spiritx/article/details/134064762