用 Numpy 来直接读取数据(通常是纯数值形式的数据)

加载常用数据

传统加载csv数据

  1. import os
  2. with open("data.csv", "r") as f:
  3. print("\n", f.read())

np.loadtxt() 自定义地读取数据

  1. import numpy as np
  2. data = np.loadtxt("data.csv", delimiter=",", skiprows=1, dtype=np.int)
  3. print(data)

比如在 loadtxt 的参数中,我们传入 , 让 numpy 在做数据分隔的时候,以逗号作为分隔符。同时 skiprow skip 掉第一行描述文字 (其实不设置这个的话,它好像也会自动帮你 skip),还有读取出来的数据要放到 dtype=np.int 类型的 array 中。该方法适用与 csv 和 txt 格式的文本格式数据。

直接从字符中加载数据

  1. row_string = "20131, 10, 67, 20132, 11, 88, 20133, 12, 98, 20134, 8, 100, 20135, 9, 75, 20136, 12, 78"
  2. data = np.fromstring(row_string, dtype=np.int, sep=",") # 读取一个数值序列
  3. data = data.reshape(6, 3) #再用 Numpy 的reshape 成你想要的样子
  4. print(data)
  5. [[20131 10 67]
  6. [20132 11 88]
  7. [20133 12 98]
  8. [20134 8 100]
  9. [20135 9 75]
  10. [20136 12 78]]

保存数据

Numpy保存数据,保存通用文本格式数据,比如 csv 或 txt。

  1. np.savetxt("data/save_data.csv", data, delimiter=",", fmt='%s')

二进制格式保存数据

  1. np.save("data/save_data.npy", data) # 保存
  2. npy_data = np.load("data/save_data.npy") # 加载

用1个 array 来存放不同类型的数据

们能用 np.savez() 保存一个 .npz 文件将这两个 array 同时存储好

  1. train_data = np.array([1,2,3])
  2. test_data = np.array([11,22,33])
  3. np.savez("data/save_data.npz", train=train_data, test=test_data) # 保存
  4. npz_data = np.load("data/save_data.npz") #加载
  5. print("train:", npz_data["train"])
  6. print("test:", npz_data["test"])
  7. train: [1 2 3]
  8. test: [11 22 33]

np.savez_compressed() 数据压缩

  1. np.savez_compressed("data/save_data_compressed.npz", train=train_data, test=test_data)
  2. npz_data_compressed = np.load("data/save_data_compressed.npz")
  3. print("train:", npz_data_compressed["train"])
  4. print("test:", npz_data_compressed["test"])
  5. train: [1 2 3]
  6. test: [11 22 33]

以上numpy 读取与保存方法,可见 numpy 还是很用心在做数据这件事的。如果你喜欢纯文本,就用 txt 或者 csv 这种方式,如果你追求存储空间和速度,就用二进制来存储。