Python NumPy 读取与保存数据:高效处理数据文件
Python NumPy 读取与保存数据:高效处理数据文件
文章目录
- Python NumPy 读取与保存数据:高效处理数据文件
- 一 主要涉及功能
- 二 数据读取
- 1 常规读取
- 2 numpy 读取
- 方法参数详解
- 3 读字符串
- 方法参数详解
- 三 保存数据
- 1 保存为文本格式
- 2 保存二进制文件
- 3 一个文件保存多个 array
- 4 数据压缩
- 四 完整代码示例
- 五 源码地址
本文详细介绍了如何使用 Python 的 NumPy 库读取与保存不同格式的数据。通过 np.loadtxt
和 np.fromstring
等方法读取 CSV 文件及字符串数据,并利用 np.savetxt
、np.save
和 np.savez
将数据保存为文本、二进制或压缩格式。文章还解释了每个函数的关键参数及其作用,帮助你更好地掌握数据处理的基本操作。通过这些操作,你可以实现高效的数据加载与存储,并且能够灵活地选择数据的存储格式,适应不同的项目需求。
导入 numpy 库
import numpy as np
一 主要涉及功能
加载常用数据格式 | 保存数据 |
---|---|
np.loadtxt(), np.fromstring() | np.savetxt() |
np.save(), np.savez(), np.savez_compressed() |
二 数据读取
1 常规读取
导入 os 库
import os
print("data file in directory:", os.listdir("csv"))
with open("csv/data.csv", "r") as f:print("\n", f.read())
2 numpy 读取
import numpy as np
data = np.loadtxt("csv/data.csv", delimiter=",", skiprows=1, dtype=np.int64)
print(data)
方法参数详解
np.loadtxt("csv/data.csv", delimiter=",", skiprows=1, dtype=np.int64)
-
"csv/data.csv"
: 这是你想要读取的文件的路径。文件需要位于执行 Python 脚本的同一目录中的csv
文件夹下,或者提供正确的相对或绝对路径。 -
delimiter=","
: 指定数据在文件中的分隔符。在 CSV 文件中,列通常是由逗号分隔的,所以这里使用逗号作为分隔符。 -
skiprows=1
: 这个参数指示loadtxt
函数跳过文件的第一行。这通常用于跳过包含列标题的行。 -
dtype=np.int64
: 指定加载数据的数据类型。np.int64
是一种整数类型,表示每个数值将被读取并存储为 64 位整数。
这些参数合起来使得 np.loadtxt
函数能够正确地从 CSV
文件读取数值数据,跳过标题行,并将所有数据元素解析为整数。
3 读字符串
row_string = "20131, 10, 67, 20132, 11, 88, 20133, 12, 98, 20134, 8, 100, 20135, 9, 75, 20136, 12, 78"
data = np.fromstring(row_string, dtype=np.int64, sep=",")
data = data.reshape(6, 3)
print("data ", data)
方法参数详解
np.fromstring(row_string, dtype=np.int64, sep=",")
-
row_string
: 这是要解析的数据字符串,假定其中包含了以逗号分隔的数字。你需要确保row_string
已经定义且格式正确,例如"1,2,3,4"
。 -
dtype=np.int64
: 指定解析数据的数据类型。在这里,np.int64
表示每个解析出的数值将被存储为 64 位整数。 -
sep=","
: 指定数据在字符串中的分隔符。这里使用逗号,因为它是 CSV 数据中常见的分隔符。
np.fromstring
函数会根据指定的分隔符将字符串分割为多个元素,然后根据指定的数据类型将这些字符串转换成数字。
三 保存数据
1 保存为文本格式
# 保存为文本格式
print("numpy data:\n", data)
np.savetxt("csv/save_data.csv", data, delimiter=",", fmt='%s')print("data file in directory:", os.listdir("csv"))
with open("csv/save_data.csv", "r") as f:print("\n", f.read())
2 保存二进制文件
np.save()
保存一个以 .npy
结尾的二进制文件,读取时使用 np.load()
加载这个二进制数据文件。
np.save("csv/save_data_10.npy", data)print("data file in directory:", os.listdir("csv"))npy_data = np.load("csv/save_data_10.npy")print(npy_data)
3 一个文件保存多个 array
用 np.savez()
保存 .npz
文件将这多个 array 同时存储。
train_data = np.array([1, 2, 3])
test_data = np.array([11, 22, 33])np.savez("csv/save_data_02.npz", train=train_data, test=test_data)
print("data file in directory:", os.listdir("csv"))npz_data = np.load("csv/save_data_02.npz")
print("train:", npz_data["train"])
print("test:", npz_data["test"])
4 数据压缩
使用 np.savez_compressed()
压缩数据
np.savez_compressed("csv/save_data_compressed.npz", train=train_data, test=test_data)
print("data file in directory:", os.listdir("csv"))npz_data_compressed = np.load("csv/save_data_compressed.npz")
print("train:", npz_data_compressed["train"])
print("test:", npz_data_compressed["test"])print("compressed file size:", os.path.getsize("csv/save_data_compressed.npz"))
print("original file size:", os.path.getsize("csv/save_data_02.npz"))
四 完整代码示例
# This is a sample Python script.# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
import os
import numpy as npdef print_hi(name):# Use a breakpoint in the code line below to debug your script.print(f'Hi, {name}') # Press ⌘F8 to toggle the breakpoint.# 加载常用数据格式# 常规方法读 osprint("data file in directory:", os.listdir("csv"))with open("csv/data.csv", "r") as f:print("\n", f.read())# 使用 numpy 读data = np.loadtxt("csv/data.csv", delimiter=",", skiprows=1, dtype=np.int64)print(data)# 读字符串row_string = "20131, 10, 67, 20132, 11, 88, 20133, 12, 98, 20134, 8, 100, 20135, 9, 75, 20136, 12, 78"data = np.fromstring(row_string, dtype=np.int64, sep=",")data = data.reshape(6, 3)print("data ", data)# 保存数据# 保存为文本格式print("numpy data:\n", data)np.savetxt("csv/save_data.csv", data, delimiter=",", fmt='%s')print("data file in directory:", os.listdir("csv"))with open("csv/save_data.csv", "r") as f:print("\n", f.read())# 保存二进制文件# np.save()# 来保存,保存的是一个以.npy# 结尾的二进制文件。加载的时候,我们能用# np.load()# 直接加载这个二进制数据文件。np.save("csv/save_data_10.npy", data)print("data file in directory:", os.listdir("csv"))npy_data = np.load("csv/save_data_10.npy")print(npy_data)# 分开多个 array 来存放,一个 numpy 文件中保存多个 numpy arraytrain_data = np.array([1, 2, 3])test_data = np.array([11, 22, 33])np.savez("csv/save_data_02.npz", train=train_data, test=test_data)print("data file in directory:", os.listdir("csv"))npz_data = np.load("csv/save_data_02.npz")print("train:", npz_data["train"])print("test:", npz_data["test"])# np.savez_compressed() 数据压缩print()np.savez_compressed("csv/save_data_compressed.npz", train=train_data, test=test_data)print("data file in directory:", os.listdir("csv"))npz_data_compressed = np.load("csv/save_data_compressed.npz")print("train:", npz_data_compressed["train"])print("test:", npz_data_compressed["test"])print("compressed file size:", os.path.getsize("csv/save_data_compressed.npz"))print("original file size:", os.path.getsize("csv/save_data_02.npz"))# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('读取保存数据')# See PyCharm help at https://www.jetbrains.com/help/pycharm/
复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。
Hi, 读取保存数据
data file in directory: ['save_data_compressed.npz', 'your_data.csv', 'save_data_02.npz', 'data.csv', 'save_data.csv', 'save_data_10.npy']# StudentID, Age, Score
20131,10,67
20132,11,88
20133,12,98
20134,8,100
20135,9,75
20136,12,78
[[20131 10 67][20132 11 88][20133 12 98][20134 8 100][20135 9 75][20136 12 78]]
data [[20131 10 67][20132 11 88][20133 12 98][20134 8 100][20135 9 75][20136 12 78]]
numpy data:[[20131 10 67][20132 11 88][20133 12 98][20134 8 100][20135 9 75][20136 12 78]]
data file in directory: ['save_data_compressed.npz', 'your_data.csv', 'save_data_02.npz', 'data.csv', 'save_data.csv', 'save_data_10.npy']20131,10,67
20132,11,88
20133,12,98
20134,8,100
20135,9,75
20136,12,78data file in directory: ['save_data_compressed.npz', 'your_data.csv', 'save_data_02.npz', 'data.csv', 'save_data.csv', 'save_data_10.npy']
[[20131 10 67][20132 11 88][20133 12 98][20134 8 100][20135 9 75][20136 12 78]]
data file in directory: ['save_data_compressed.npz', 'your_data.csv', 'save_data_02.npz', 'data.csv', 'save_data.csv', 'save_data_10.npy']
train: [1 2 3]
test: [11 22 33]data file in directory: ['save_data_compressed.npz', 'your_data.csv', 'save_data_02.npz', 'data.csv', 'save_data.csv', 'save_data_10.npy']
train: [1 2 3]
test: [11 22 33]
compressed file size: 402
original file size: 552
五 源码地址
代码地址:
国内看 Gitee 之 numpy/读取保存数据.py
国外看 GitHub 之 numpy/读取保存数据.py
引用 莫烦 Python