利用python 进行数据分析(第三版)第二章小结

利用python 进行数据分析(第三版)第二章小结

由于是闲暇时间看的,且为读书笔记,所以只会写一些心得和容易混淆的知识,简单知识将不在重复

  1. 在变量或者函数后使用?可以查看详细信息。?还有最后一个用途,即以类似于标准 Unix 或 Windows 命令行的方式搜索 IPython 命名空间。多个字符与通配符 ( *) 组合将显示与通配符表达式匹配的所有名称。

    python 复制代码
    In [1]: b = [1, 2, 3]
    
    In [2]: b?
    Type:        list
    String form: [1, 2, 3]
    Length:      3
    Docstring:
    Built-in mutable sequence.
    
    #function
    In [6]: add_numbers?
    Signature: add_numbers(a, b)
    Docstring:
    Add two numbers together
    Returns
    
    
    
    In [9]: import numpy as np
    
    In [10]: np.*load*?
    np.__loader__
    np.load
    np.loads
    np.loadtxt
  2. 函数可以同时采用位置参数关键字参数:

    python 复制代码
    result = f(a, b, c, d=5, e="foo")
  3. 在Python中分配变量(或名称)时,使用赋值号,不是复制,而是直接引用,例如:

    复制代码
    In [8]: a = [1, 2, 3]

    假设我们分配a给一个新变量b

    复制代码
    In [9]: b = a
    
    In [10]: b
    Out[10]: [1, 2, 3]

    在某些语言中,赋值 ifb会导致数据[1, 2, 3]被复制。在 Python 中,ab实际上现在引用同一个对象,即原始列表[1, 2, 3]。可以通过向 附加一个元素a然后检查来向自己证明这一点b

    复制代码
    In [11]: a.append(4)
    
    In [12]: b
    Out[12]: [1, 2, 3, 4]
  4. 访问对象的属性时,可以使用"." +Tab键,也可以使用getattr,例如:

    python 复制代码
    In [32]: getattr(a, "split")
    Out[32]: <function str.split(sep=None, maxsplit=-1)>
  5. 通常,我们可能不关心对象的类型,而只关心它是否具有某些方法或行为。这有时被称为DUCK类型 ,俗话说"如果它像鸭子一样行走并且像鸭子一样嘎嘎叫,那么它就是一只鸭子"。例如,如果对象实现了迭代器协议 ,则可以验证该对象是否可迭代。对于许多对象来说,这意味着它有一个__iter__"神奇方法",尽管另一种更好的检查方法是尝试使用该iter函数:

    复制代码
    In [33]: def isiterable(obj):
       ....:     try:
       ....:         iter(obj)
       ....:         return True
       ....:     except TypeError: # not iterable
       ....:         return False

    该函数将返回True字符串以及大多数 Python 集合类型:

    复制代码
    In [34]: isiterable("a string")
    Out[34]: True
    
    In [35]: isiterable([1, 2, 3])
    Out[35]: True
    
    In [36]: isiterable(5)
    Out[36]: False
  6. 符串模板或格式化是另一个重要主题。随着 Python 3 的出现,实现此目的的方法数量不断增加,在这里我将简要描述其中一个主要接口的机制。字符串对象有一个format方法,可用于将格式化参数替换为字符串,生成一个新字符串:

    复制代码
    In [79]: template = "{0:.2f} {1:s} are worth US${2:d}"

    在这个字符串中:

    • {0:.2f}表示将第一个参数格式化为具有两位小数的浮点数。
    • {1:s}表示将第二个参数格式化为字符串。
    • {2:d}表示将第三个参数格式化为精确整数。

    为了替换这些格式参数的参数,我们将参数序列传递给该format方法:

    复制代码
    In [80]: template.format(88.46, "Argentine Pesos", 1)
    Out[80]: '88.46 Argentine Pesos are worth US$1'

    Python 3.6 引入了一个名为f-strings格式化字符串文字 的缩写)的新功能,它可以使创建格式化字符串变得更加方便。要创建 f 字符串,请f在字符串文字前面写入字符。在字符串中,将 Python 表达式括在大括号中,以将表达式的值替换为格式化字符串:

    复制代码
    In [81]: amount = 10
    
    In [82]: rate = 88.46
    
    In [83]: currency = "Pesos"
    
    In [84]: result = f"{amount} {currency} is worth US${amount / rate}"

    可以使用与上面的字符串模板相同的语法在每个表达式之后添加格式说明符:

    复制代码
    In [85]: f"{amount} {currency} is worth US${amount / rate:.2f}"
    Out[85]: '10 Pesos is worth US$0.11'
  7. 在现代 Python(即 Python 3.0 及更高版本)中,Unicode 已成为一流的字符串类型,可以更一致地处理 ASCII 和非 ASCII 文本。在旧版本的 Python 中,字符串都是字节,没有任何显式的 Unicode 编码。假设您知道字符编码,则可以转换为 Unicode。下面是一个包含非 ASCII 字符的 Unicode 字符串示例:

    复制代码
    In [86]: val = "español"
    
    In [87]: val
    Out[87]: 'español'

    我们可以使用以下方法将此 Unicode 字符串转换为其 UTF-8 字节表示形式encode

    复制代码
    In [88]: val_utf8 = val.encode("utf-8")
    
    In [89]: val_utf8
    Out[89]: b'espa\xc3\xb1ol'
    
    In [90]: type(val_utf8)
    Out[90]: bytes

    假设您知道对象的 Unicode 编码bytes,您可以使用以下方法返回decode

    复制代码
    In [91]: val_utf8.decode("utf-8")
    Out[91]: 'español'
  8. 内置的 Pythondatetime模块提供datetimedate、 和time类型。该类型结合了和datetime中存储的信息,是最常用的:date``time

    复制代码
    In [113]: from datetime import datetime, date, time
    
    In [114]: dt = datetime(2011, 10, 29, 20, 30, 21)
    
    In [115]: dt.day
    Out[115]: 29
    
    In [116]: dt.minute
    Out[116]: 30

    给定一个datatime实例,可以使用datatime方法获取它的data和time对象。

    复制代码
    In [117]: dt.date()
    Out[117]: datetime.date(2011, 10, 29)
    
    In [118]: dt.time()
    Out[118]: datetime.time(20, 30, 21)

    strftime方法将 a 格式化datetime为字符串:

    复制代码
    In [119]: dt.strftime("%Y-%m-%d %H:%M")
    Out[119]: '2011-10-29 20:30'

    可以使用以下函数将字符串转换(解析)为datetime对象strptime

    复制代码
    In [120]: datetime.strptime("20091031", "%Y%m%d")
    Out[120]: datetime.datetime(2009, 10, 31, 0, 0)

    当聚合或以其他方式对时间序列数据进行分组时,会常常用到替代datatime时间序列的一些值,例如,将minutesecond字段替换为零:

    复制代码
    In [121]: dt_hour = dt.replace(minute=0, second=0)
    
    In [122]: dt_hour
    Out[122]: datetime.datetime(2011, 10, 29, 20, 0)

    由于datetime.datetime是不可变类型,因此此类方法总是会生成新对象。所以在前面的例子中,dt没有被修改:

    复制代码
    In [123]: dt
    Out[123]: datetime.datetime(2011, 10, 29, 20, 30, 21)

    两个对象的差异datetime产生一个datetime.timedelta类型:

    复制代码
    In [124]: dt2 = datetime(2011, 11, 15, 22, 30)
    
    In [125]: delta = dt2 - dt
    
    In [126]: delta
    Out[126]: datetime.timedelta(days=17, seconds=7179)
    
    In [127]: type(delta)
    Out[127]: datetime.timedelta

    输出timedelta(17, 7179)表明timedelta编码偏移量为 17 天 7,179 秒。

相关推荐
数据智能老司机2 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机3 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i3 小时前
drf初步梳理
python·django
每日AI新事件3 小时前
python的异步函数
python
这里有鱼汤5 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook14 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室14 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三16 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试