Python NumPy 读取与保存数据:高效处理数据文件

Python NumPy 读取与保存数据:高效处理数据文件

本文详细介绍了如何使用 Python 的 NumPy 库读取与保存不同格式的数据。通过 np.loadtxtnp.fromstring 等方法读取 CSV 文件及字符串数据,并利用 np.savetxtnp.savenp.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 np


def 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.
    # 加载常用数据格式
    # 常规方法读 os

    print("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 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"])
    # 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,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    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

五 源码地址

代码地址:

国内看 Giteenumpy/读取保存数据.py

国外看 GitHubnumpy/读取保存数据.py

引用 莫烦 Python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码不忘补水

感谢有你,让我的创作更有价值!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值