Numpy 如何将ndarray保存为.csv文件

Numpy 如何将ndarray保存为.csv文件

在数据处理和机器学习中,我们通常使用Numpy来处理和存储数据。Numpy是用于科学计算的Python第三方库,它提供了数组对象ndarray和一些对数组进行运算的函数。在本文中,我们将介绍如何将Numpy中的ndarray保存为.csv文件,以及一些常见的应用。

阅读更多:Numpy 教程

保存为.csv文件

在Numpy中,我们可以使用numpy.savetxt()函数将ndarray保存为.csv文件。该函数的语法如下:

numpy.savetxt(fname, X, fmt='%.18e', delimiter=',', newline='\n', header='', footer='', comments='# ', encoding=None)
Python

其中,参数fname是保存的文件名,参数X是要保存的ndarray数组,参数fmt是格式化字符串,默认为’%.18e’表示科学计数法,参数delimiter是分隔符,默认为逗号’,’,参数newline是行结束符,默认为’\n’,参数headerfooter分别是文件头和尾的字符串,默认为空,参数comments是注释字符串的标识符,默认为’#’,参数encoding是文件编码,默认为None表示使用系统默认编码。

例如,我们有一个ndarray数组:

import numpy as np

a = np.array([[1, 2], [3, 4]])
Python

要将这个数组保存为.csv文件,可以使用以下代码:

np.savetxt('a.csv', a, delimiter=',')
Python

运行代码后,就可以在当前目录下生成一个名为a.csv的文件,内容如下:

1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
Text

读取.csv文件

除了保存为.csv文件,我们还可以使用Numpy读取.csv文件中的数据。Numpy提供了numpy.loadtxt()函数和numpy.genfromtxt()函数来读取文本文件。

numpy.loadtxt()函数的语法如下:

numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)
Python

其中,参数fname是文件名或文件句柄,参数dtype是返回数组的数据类型,默认为float,参数comments是注释字符串的标识符,默认为’#’,参数delimiter是分隔符,默认为None根据空格和制表符自动识别,参数converters是用于转换值的可选函数或字典,参数skiprows是跳过文件开头的行数,默认为0,参数usecols是要加载的列的序列,默认为全部列,参数unpack是指定是否转置数组,默认为False不转置,参数ndmin是指定返回数组的最小维数,默认为0,参数encoding是文件编码,默认为’bytes’表示二进制模式,参数max_rows是指定最多读取的行数,默认为None读取全部行。

例如,我们有一个名为b.csv的文件,内容如下:

1.0,2.0
3.0,4.0
Text

要读取这个文件中的数据,可以使用以下代码:

b = np.loadtxt('b.csv', delimiter=',')
print(b)
Python

运行代码后,输出如下:

array([[1., 2.],
       [3., 4.]])
Text

numpy.genfromtxt()函数是numpy.loadtxt()函数的变体,它可以更灵活地处理缺失值和数据类型。该函数的语法如下:

numpy.genfromtxt(fname, dtype=<class 'float'>, delimiter=None, encoding=None, skip_header=0, skip_footer=0, comments='#', skiprows=0, usecols=None, unpack=False, ndmin=0, missing_values=None, filling_values=None, defaultfmt='f%i', names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, usemask=False, loose=True, invalid_raise=True, max_rows=None, encoding=None)
Python

其中,参数与numpy.loadtxt()函数类似,另外还有一些特殊的参数:

  • missing_values:指定缺失值的字符串或序列,默认为None表示不处理缺失值;
  • filling_values:指定用于填充缺失值的值或序列,默认为None表示不填充;
  • defaultfmt:指定数据类型的默认格式字符串;
  • names:用于指定每列的名字的字符串序列或True表示从文件头中自动读取,默认为None表示不提供列名。

例如,我们有一个名为c.csv的文件,内容如下:

1.0,2.0,,
3.0,4.0,,5.0
Text

要读取这个文件中的数据并处理缺失值,可以使用以下代码:

c = np.genfromtxt('c.csv', delimiter=',', dtype=float, missing_values='', filling_values=np.nan)
print(c)
Python

运行代码后,输出如下:

array([[ 1.,  2., nan, nan],
       [ 3.,  4., nan,  5.]])
Text

示例应用

在实际应用中,我们可以使用Numpy读取.csv文件中的数据,然后进行处理和分析,最后再保存为.csv文件。下面是一个简单的示例,演示如何统计一个班级的成绩并按照总分排序:

import numpy as np

# 读取数据
data = np.genfromtxt('scores.csv', delimiter=',', skip_header=1, dtype=int)

# 统计总分并排序
totals = np.sum(data[:, 1:], axis=1)
sorted_indices = np.argsort(totals)[::-1]
sorted_data = data[sorted_indices]

# 输出结果
print(sorted_data)
np.savetxt('sorted_scores.csv', sorted_data, header='id,math,english,physics', fmt='%d', delimiter=',')
Python

假设我们有一个名为scores.csv的文件,内容如下:

id,math,english,physics
101,80,90,85
102,70,75,80
103,90,85,90
104,60,70,75
105,85,95,80
Text

运行代码后,输出如下:

[[101  80  90  85]
 [105  85  95  80]
 [103  90  85  90]
 [102  70  75  80]
 [104  60  70  75]]
Text

并且会生成一个名为sorted_scores.csv的文件,内容如下:

# id,math,english,physics
101,80,90,85
105,85,95,80
103,90,85,90
102,70,75,80
104,60,70,75
Text

总结

Numpy提供了方便的方法来保存和读取.csv文件中的数据。使用numpy.savetxt()函数可以将ndarray保存为.csv文件,使用numpy.loadtxt()numpy.genfromtxt()函数可以读取.csv文件中的数据。对于缺失值和数据类型等问题,可以使用numpy.genfromtxt()函数的可选参数进行处理。在实际应用中,我们可以利用Numpy进行数据分析、处理和保存。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册