了解如何运用 Python 的某些数据对象, 有利于保持井然有序的状态, 避免在处理数据科学项目中的大量数据时出错.
在数据科学项目中, 有时想跟踪数据信息, 或者希望灵活, 快速, 轻松地更新数据的全新输入.
为此, 小芯整理这篇文章. 在本文中, 你将学会:
在执行 loop 命令时, 跟踪索引
更新全新的 dictionaryitems 函
使用可重用对象记录新信息
我们将从这些问题入手, 详细介绍如何使用 Python 工具解决问题.
希望这种方法能有助于这些工具在代码中应用位置的可视化.
1, 一边执行 Loop 命令, 一边跟踪 假设有一张好友姓名列表. 既要遍历列表, 又要跟踪计数. 该怎么做? 使用 enumerate 即可.
- >>>friends = ['Ben', 'Kate', 'Thinh']
- >>> for i, item in enumerate(friends):
- >>> print(f'{i}: {item}')
- 0: Ben
- 1: Kate
- 2: Thinh
或者简单运用 dictionarycomprehension
- >>>{
- i: friends[i] for i in range(len(friends))
- }
- {
- 0: 'Ben', 1: 'Kate', 2: 'Thinh'
- }
2. 更新 DictionaryItems 函数
假如正在使用 dictionary 函数以跟踪首句中的单词及字数.
sent1 ={'love': 1, 'hate': 3
但进行到第二句时, 你想要用新语句更新先前的 dictionary 函数.
sent2 = {'love':2, 'flower': 1}
更新的单词包如下:
{'love':3, 'hate': 3, 'flower': 1}
该怎么做? 要是有些工具能助你轻松完成, 岂不是很好? 如果正好需要这类工具, collections.Counter 正中下怀. collections.Counter 这一类允许集合中多个元素的存在
- fromcollections import Counter
- bag_words = Counter()sent1 = {
- 'love': 1, 'hate': 3
- }bag_words.update(sent1)sent2= {
- 'love': 2, 'flower': 1
- }bag_words.update(sent2)bag_words
结果:
Counter({'love':3, 'hate': 3, 'flower': 1})
太好了! 现在, 当你从其他语句中收集到更多信息时, 便可以很容易地更新单词包. 可以运用 len 找出语句中有多少唯一单词,
- >>>len(bag_words)
- 3
或者, 可以运用 sum 计算语句中的单词总量,
- >>>sum(bag_words.values())
- 7
3. 运用 Namedtuple 定义可重用对象
想跟踪有关朋友的信息列表, 为他们的生日做准备. 由于暂时无可用信息, 因此首先需要创建一个占位符, 以便之后在其中输入信息. 如果要记录凯特 (Kate) 的生日, 最喜欢的食物, 肤色以及是否内向, 可以这样做:
>>>Kate = Friend('Feb', 'cake', 'pink', True)
此外, 如果记不住她的生日, 可以调用
- >>>Kate.birthday
- 'Feb'
Python 中的类对象可以实例化凯特, 但是创建一个 Friend 类来保存简单信息, 很耗费时间. 在此情况下, namedtuple 是个不错的选择. namedtuple 允许记录定义一个可重用对象, 确保使用正确的归档名称
fromcollections import namedtuplenamedtupleFriend = namedtuple('Friend' , 'birthday foodcolor introvert')Kate = Friend('Feb', 'cake', 'pink', True)Ben = Friend('Jan','fish', 'red', False)
显示有关凯特的信息:
- >>>Kate
- Friend(birthday='Feb', food='cake', color='pink', introvert=True)
如果想知道本 (Ben) 是内向还是外向, 可以调用
- >>>Ben.introvert
- False
使用 nametuples , 用户可以轻松地重用同一对象以实例化新信息. 认真阅读并实践, 你将学会运用 enumerate, 集合推导 (set comprehension),Counter 和 namedtuple 来跟踪信息.
来源: http://developer.51cto.com/art/202003/611933.htm