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

7 篇文章 0 订阅
5 篇文章 0 订阅

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

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

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

    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. 函数可以同时采用位置参数关键字参数:

    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,例如:

    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 秒。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值