3.2 创建与加载数组
3.2.1 创建数组
下面逐一介绍创建数组的不同方式。
指定元素
# array
x = array([1, 2, 3])
# array with data type
x = array([1, 2, 3], dtype=float64)
# matrix
y = array([[1, 2, 3], [4, 5, 6]])
# multiplication table
def mul_table(n):
return array([[(i+1) * (j+1) for i in xrange(n)] for j in xrange(n)])
使用NumPy的内置函数
# 100 zeros
x = zeros(100)
# 10 * 10 zeros
x = zeros((10, 10))
# ones is similar to zeros
# identity, eye, diag
x = identity(5)
x = eye(5, k=1)
# spaced numbers
x = arange(1, 10, 2)
# array([1, 3, 5, 7, 9])
x = linspace(1, 10, 5)
# array([1. , 3.25, 5.5 , 7.75, 10. ])
使用随机值
# 均匀分布(uniformly sampled numbers bttween 0 and 1)
rand(2, 5)
# 正态分布(normal distribution)
randn(2, 5)
# or randint(random integers), exponential
# shuffle/permutation
arr = arange(10)
shuffle(arr)
# array([6, 4, 3, 5, 9, 2, 7, 1, 8, 0])
3.2.2 加载数组
在处理数据时,往往会需要从它处加载数据,而非自行创建,“它处”可以是其它Python变量的值,或其它数据文件。NumPy很擅长读取文本文件或CSV文件数据。此外,Pandas包在处理表格化数据亦很有用。表格化数据可视作数据库表的等价物,包含的数据可以是数字,也可以是如字符串之类的数据。
从Python对象
标准方法是array函数。
从缓冲区或外部文件
另一种常见的方式是从内存缓冲区或文件中加载数据。
p.fromstring('1 2 5 10', dtype=int, sep=' ')
# array([ 1, 2, 5, 10])
# or use frombuffer()
# or fromfile(), loadtxt(), genfromtxt()
保存数组到文件可使用save或savetxt。另外两个相关函数是loadz和savez。
使用Pandas
Pandas擅长处理表格化数据,除了加载外,还可以处理缺失值、数据对齐问题(时间序列)。
现在来看看如何处理真实世界中的数据集,下载http://ipython.rossant.net/cities.zip 文件,解压缩,然后:
data = pd.read_csv(filename, low_memory=False)
type(data)
# pandas.core.frame.DataFrame
DataFrame对象用于表示二维数据集,较NumPy的数组结构上更为丰富,keys方法返回各列的名字。
data.shape, data.keys()
# take a quick look a the data
data.head()
data.tail()