numpy对txt、csv、xlsx、npy、npz文件操作
arr = np.arange(10)
np.save('some_array', arr) # 保存数组到文件中
np.load('some_array.npy') # 加载数组文件
np.savez('array_archive.npz', a=arr, b=arr) # 保存多个数组到文件中
np.savez_compressed('arrays_compressed.npz', a=arr, b=arr) # 保存并压缩多个文件
1. 从.txt
文件读取
- 建立test.txt文档:
1,1,2,4,3,9,4,16,5,25
以下是一些步骤:
- 将文本文件读入
txt
变量:
txt = np.loadtxt('test.txt', delimiter = ',')
txt
这是前面代码块的说明:
test.txt
文本文件有 10 个数字,用逗号隔开,代表二维空间中的 x 和 y 五个点的坐标(1, 1)
,(2, 4)
,(3, 9)
,(4, 16)
和(5, 25)
。- 函数
loadtxt()
和将文本数据加载到 NumPy 数组中。
您应该获得以下输出:
array([ 1., 1., 2., 4., 3., 9., 4., 16., 5., 25.])
- 将平面数组转换为 2D 空间中的五个点:
txt = txt.reshape(5,2)
txt
执行前面的代码后,您应该看到以下输出:
array([[ 1., 1.], [ 2., 4.], [ 3., 9.], [ 4., 16.], [ 5., 25.]])
- 将
.txt
变量拆分为x
和y
轴坐标:
x = txt[:,0]
y = txt[:,1]
print(x, y)
这是前面代码块的解释:
- 将
x
和y
轴点与txt
变量分开。 x
是txt
中的第一列,y
是第二列。- Python 索引从 0 开始。
执行上述代码后,您应该看到以下输出:
[ 1\. 2\. 3\. 4\. 5.] [ 1\. 4\. 9\. 16\. 25.]
2. 从.csv
文件读取
建立test.csv:
1 1
2 4
3 9
4 16
5 25
.csv
文件具有行和列的关系数据库结构,test.csv
文件在 2D 空间中具有五个点的 x,y 坐标。 每个点是文件中的一行,分为两列:x
和y
。 相同的 NumPy loadtxt()
函数用于加载数据:
x, y = np.loadtxt ('test.csv', unpack = True, usecols = (0,1), delimiter = ',')
print(x)
print(y)
执行上述代码后,应该看到以下输出:
[ 1\. 2\. 3\. 4\. 5.] [ 1\. 4\. 9\. 16\. 25.]
3. 从.xlsx
文件读取
建立test.xlsx 两列:
1 1
2 4
3 9
4 16
5 25
现在,让我们从.xlsx
文件中读取相同的数据,并创建x
和y
NumPy 数组。 NumPy loadtxt()
函数不支持.xlsx
文件格式。 可以使用 Python 数据处理包pandas
:
- 将
.xlsx
文件读入 pandas 数据帧中。 该文件在 2D 空间中具有相同的五个点,每个点在具有x
和y
列的单独行中:
# 'test.xlsx' 文件位置,有\的需要用\\表示, 'sheet'是子表名称, header=1将第2行设置为列索引
df = pd.read_excel('test.xlsx', 'sheet', header=1)
- 将 pandas 数据帧转换为 NumPy 数组:
data_array = np.array(df)
print(data_array)
您应该看到以下输出:
[[ 1 1] [ 2 4] [ 3 9] [ 4 16] [ 5 25]]
- 现在从 NumPy 数组中提取
x
和y
坐标:
x , y = data_array[:,0], data_array[:,1]
print(x,y)
您应该看到以下输出:
[1 2 3 4 5] [ 1 4 9 16 25]