Python数据分析 | (13)数组文件输入输出及结构化和记录式数组

本篇博客所有示例使用Jupyter NoteBook演示。

Python数据分析系列笔记基于:利用Python进行数据分析(第2版)  

目录

1.用于数组的文件输入输出

2.高级数组输入输出

3.结构化和记录式数组

4.性能建议


1.用于数组的文件输入输出

NumPy能够读写磁盘上的文本数据或二进制数据。本小节只讨论NumPy的内置二进制格式,因为更多用户会使用pandas或其他工具加载文本或表格数据(之后会学习).

np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的:

import numpy as np

arr = np.arange(10)
np.save('some_array',arr)

save的第一个参数是文件路径(绝对/相对路径)末尾没有扩展名.npy,则该扩展名会被自动加上。然后就可以使用np.load读取磁盘上的数组:

np.load('some_array.npy')

通过np.savez可以将多个数组保存到一个未压缩文件中,数组以关键字参数的形式传入:

print(arr)
np.savez('array.npz',a=arr,b=arr)
#加载.npz时会得到一个类似字典对象
arch = np.load('array.npz')
print(arch['a'])   #会对各个数组进行延迟加载
print(arch['b'])

如果要将数据压缩,可以使用np.savez_compressed:

print(arr)
np.savez_compressed('array_compressed.npz',a=arr,b=arr)
#加载.npz时会得到一个类似字典对象
arch = np.load('array_compressed.npz')
print(arch['a'])   #会对各个数组进行延迟加载
print(arch['b'])

 

2.高级数组输入输出

之前的np.save和np.load用于读写磁盘上以二进制格式存储的数组。还有一些工具可用于更为复杂的场景。尤其是内存映像(memory map),它使你能处理在内存中放不下的数据集。

  • 内存映像文件

内存映像文件是一种将磁盘上的非常大的二进制数据文件当作内存中的数组进行处理的方式。NumPy实现了一个类似于ndarray的memma

### 数据分析常用内置函数汇总 在数据分析中,Python 提供了多种内置函数方法来处理数据。以下是一些常用的内置函数及其应用场景: #### `head()` `tail()` `head(n)` 函数用于返回 DataFrame 的前 `n` 行,默认值为 5。类似地,`tail(n)` 函数用于返回 DataFrame 的最后 `n` 行。这些函数通常用于快速查看数据集的开头或结尾部分。 ```python import pandas as pd # 读取CSV文件 Data = pd.read_csv('Data.csv', sep=',', dtype=object) # 显示前6行 print(Data.head(6)) # 显示后5行(默认) print(Data.tail()) ``` #### `shape` `shape` 属性用于获取 DataFrame 或数组的维度信息,返回一个元组,其中第一个元素表示行数,第二个元素表示列数。这在了解数据集规模时非常有用。 ```python # 获取数据集的大小 print(Data.shape) ``` #### `len()` `len()` 函数用于获取对象的长度或项目数量。对于列表、字符串、字典等数据结构,它返回的是元素的数量。在数据分析中,`len()` 可以用来统计数据集中的记录数。 ```python # 获取数据集中的记录数 print(len(Data)) ``` #### `type()` `type()` 函数用于获取对象的类型。在数据分析中,它可以用来检查数据集中某一列的数据类型,确保它们符合预期。 ```python # 检查某一列的数据类型 print(type(Data['column_name'])) ``` #### `isinstance()` `isinstance()` 函数用于检查一个对象是否是某个类(或其子类)的实例。在数据分析中,它可以用来验证数据类型,确保数据满足特定条件。 ```python # 检查某个变量是否是DataFrame的实例 print(isinstance(Data, pd.DataFrame)) ``` #### `sorted()` `sorted()` 函数用于对可迭代对象进行排序,并返回一个新的列表。在数据分析中,可以使用 `key` 参数指定排序依据,例如按字符串长度排序。 ```python # 按字符串长度排序 lst = ["123", "4567", "0", "12", "789"] lst.sort(key=len) # 输出 ['0', '12', '123', '789', '4567'] print(lst) ``` #### `sum()`, `min()`, `max()` 这些函数分别用于计算可迭代对象中所有元素的总、最小值最大值。在数据分析中,它们常用于统计数据集中的数值型列。 ```python # 计算某列的总、最小值最大值 print(sum(Data['numeric_column'])) print(min(Data['numeric_column'])) print(max(Data['numeric_column'])) ``` #### `round()` `round()` 函数用于对浮点数进行四舍五入。在数据分析中,它可以帮助简化输出结果,使其更易于阅读。 ```python # 四舍五入到两位小数 print(round(3.14159, 2)) ``` #### `abs()` `abs()` 函数用于返回数字的绝对值。在数据分析中,它可以用来处理负值,确保数据保持正值。 ```python # 返回绝对值 print(abs(-10)) ``` #### `map()` `map()` 函数用于将一个函数应用于一个或多个可迭代对象的所有元素。在数据分析中,它可以用来转换数据集中的某些列。 ```python # 将某列的所有元素转换为整数 Data['column_name'] = Data['column_name'].map(int) ``` #### `filter()` `filter()` 函数用于过滤序列,保留符合条件的元素。在数据分析中,它可以用来筛选出满足特定条件的数据。 ```python # 筛选出大于10的元素 filtered_data = list(filter(lambda x: x > 10, Data['numeric_column'])) print(filtered_data) ``` #### `reduce()` `reduce()` 函数用于累积地应用一个函数于一个序列上,最终得到一个单一的结果。在数据分析中,它可以用来计算复杂的数据聚合。 ```python from functools import reduce # 计算所有元素的乘积 product = reduce(lambda x, y: x * y, Data['numeric_column']) print(product) ``` #### `zip()` `zip()` 函数用于将多个可迭代对象打包成元组。在数据分析中,它可以用来合并两个或多个数据集。 ```python # 合并两个列表 names = ['Alice', 'Bob', 'Charlie'] scores = [85, 90, 95] combined = list(zip(names, scores)) print(combined) ``` #### `enumerate()` `enumerate()` 函数用于将一个可迭代对象组合为其索引序列。在数据分析中,它可以用来同时遍历索引值。 ```python # 遍历索引值 for index, value in enumerate(Data['column_name']): print(f"Index {index}: Value {value}") ``` #### `all()` `any()` `all()` 函数用于检查所有元素是否都为真,而 `any()` 函数用于检查至少有一个元素为真。在数据分析中,它们可以用来验证数据完整性。 ```python # 检查所有元素是否都为真 print(all(Data['boolean_column'])) # 检查是否有任意一个元素为真 print(any(Data['boolean_column'])) ``` #### `dir()` `dir()` 函数用于列出对象的所有属性方法。在数据分析中,它可以用来查看某个对象支持的操作。 ```python # 查看DataFrame支持的方法 print(dir(Data)) ``` #### `help()` `help()` 函数用于显示对象的帮助文档。在数据分析中,它可以用来快速查阅某个函数或模块的用法。 ```python # 显示帮助文档 help(pd.DataFrame) ``` #### `eval()` `eval()` 函数用于执行一个字符串表达,并返回表达的值。在数据分析中,它可以用来动态计算表达。 ```python # 动态计算表达 expression = "3 + 4" result = eval(expression) print(result) ``` #### `exec()` `exec()` 函数用于执行存储在字符串或文件中的 Python 代码。在数据分析中,它可以用来运行动态生成的代码片段。 ```python # 执行动态生成的代码 code = """ a = 5 b = 10 print(a + b) """ exec(code) ``` #### `input()` `input()` 函数用于从用户输入中读取数据。在数据分析中,它可以用来交互地获取参数。 ```python # 获取用户输入 user_input = input("Enter a number: ") print(user_input) ``` #### `open()` `open()` 函数用于打开文件,并返回一个文件对象。在数据分析中,它可以用来读取或写入数据文件。 ```python # 读取文件内容 with open('data.txt', 'r') as file: content = file.read() print(content) ``` #### `range()` `range()` 函数用于生成一个整数序列。在数据分析中,它可以用来创建索引或循环次数。 ```python # 创建一个范围 for i in range(10): print(i) ``` #### `reversed()` `reversed()` 函数用于反转序列。在数据分析中,它可以用来逆序处理数据。 ```python # 反转列表 numbers = [1, 2, 3, 4, 5] reversed_numbers = list(reversed(numbers)) print(reversed_numbers) ``` #### `slice()` `slice()` 函数用于创建一个切片对象。在数据分析中,它可以用来提取数据的一部分。 ```python # 创建切片对象 s = slice(1, 4) numbers = [10, 20, 30, 40, 50] print(numbers[s]) ``` #### `str()` `str()` 函数用于将对象转换为字符串。在数据分析中,它可以用来格化输出。 ```python # 转换为字符串 number = 123 print(str(number)) ``` #### `tuple()` `tuple()` 函数用于将可迭代对象转换为元组。在数据分析中,它可以用来创建不可变的数据结构。 ```python # 转换为元组 numbers = [1, 2, 3] tupled_numbers = tuple(numbers) print(tupled_numbers) ``` #### `list()` `list()` 函数用于将可迭代对象转换为列表。在数据分析中,它可以用来创建可变的数据结构。 ```python # 转换为列表 numbers = (1, 2, 3) listed_numbers = list(numbers) print(listed_numbers) ``` #### `set()` `set()` 函数用于创建一个无序且不重复的集合。在数据分析中,它可以用来去除重复项。 ```python # 去除重复项 numbers = [1, 2, 2, 3, 4, 4, 5] unique_numbers = set(numbers) print(unique_numbers) ``` #### `dict()` `dict()` 函数用于创建字典。在数据分析中,它可以用来存储键值对。 ```python # 创建字典 keys = ['a', 'b', 'c'] values = [1, 2, 3] dictionary = dict(zip(keys, values)) print(dictionary) ``` #### `pow()` `pow()` 函数用于计算幂。在数据分析中,它可以用来进行数学运算。 ```python # 计算幂 print(pow(2, 3)) # 输出 8 ``` #### `divmod()` `divmod()` 函数用于同时返回商余数。在数据分析中,它可以用来进行除法运算。 ```python # 返回商余数 print(divmod(10, 3)) # 输出 (3, 1) ``` #### `id()` `id()` 函数用于返回对象的唯一标识符。在数据分析中,它可以用来检查对象的身份。 ```python # 返回对象的唯一标识符 x = 10 print(id(x)) ``` #### `hash()` `hash()` 函数用于返回对象的哈希值。在数据分析中,它可以用来快速查找对象。 ```python # 返回对象的哈希值 print(hash("hello")) ``` #### `memoryview()` `memoryview()` 函数用于访问对象的内存缓冲区。在数据分析中,它可以用来高效处理大型数据集。 ```python # 访问内存缓冲区 byte_array = bytearray(b'Hello World') mv = memoryview(byte_array) print(mv[0]) # 输出 72 ``` #### `next()` `next()` 函数用于获取迭代器的下一个项目。在数据分析中,它可以用来逐个处理数据。 ```python # 获取迭代器的下一个项目 iterator = iter([1, 2, 3]) print(next(iterator)) # 输出 1 ``` #### `property()` `property()` 函数用于创建属性。在数据分析中,它可以用来封装数据访问逻辑。 ```python # 创建属性 class Person: def __init__(self, name): self._name = name @property def name(self): return self._name p = Person("Alice") print(p.name) ``` #### `super()` `super()` 函数用于调用父类的方法。在数据分析中,它可以用来实现继承。 ```python # 调用父类的方法 class Animal: def speak(self): print("Animal speaks") class Dog(Animal): def speak(self): super().speak() print("Dog barks") d = Dog() d.speak() ``` #### `type()` `type()` 函数用于获取对象的类型。在数据分析中,它可以用来检查数据类型。 ```python # 获取对象的类型 print(type("hello")) # 输出 <class 'str'> ``` #### `vars()` `vars()` 函数用于返回对象的 `__dict__` 属性。在数据分析中,它可以用来查看对象的内部状态。 ```python # 返回对象的__dict__属性 class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("Alice", 30) print(vars(p)) ``` #### `__import__()` `__import__()` 函数用于动态导入模块。在数据分析中,它可以用来按需加载库。 ```python # 动态导入模块 math_module = __import__('math') print(math_module.sqrt(16)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值