官网
Numpy
简介
- numpy与pandas是非常常用的库,后面会经常用到。
- 如果使用anaconda的,可能已经自带了这2个包。
- 如果提示没有此包的,使用conda或者pip或者anaconda navigator安装一下。
- 正常来说,pandas是依赖numpy的
- NumPy数组比Python列表更快,更紧凑。阵列消耗较少的内存,使用起来很方便。NumPy使用更少的内存来存储数据,并且提供了一种指定数据类型的机制。这使得代码可以进一步优化。
- 需要查找更多库可以去 https://pypi.org/ 对标npmjs
引入
- 通常我们会把numpy命名为np
import numpy as np
np数组
- 制作你的第一个nparray:
a = np.array([1, 2, 3, 4, 5, 6])
- 这个输出跟普通的python数组没太大区别,但是你可以看见打印出来是个nparray的类,类似于js中的类数组:
print type(a)
py2:
<type ‘numpy.ndarray’>
py3:
<class ‘numpy.ndarray’>
- 同样,可以做成n维数组:
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
- 创建全是为0的数组:
>>> np.zeros(2)
array([0., 0.])
- 创建全是1的数组
np.ones(3)
array([1., 1., 1.])
- 创建空数组(每个值会由内存的随机值填入)
np.empty(2)
- 创建0-100的数组:
np.arange(100)
排序
arr = np.array([2, 1, 5, 3, 7, 4, 6, 8])
np.sort(arr)
array([1, 2, 3, 4, 5, 6, 7, 8])
- https://numpy.org/doc/stable/reference/generated/numpy.sort.html#numpy.sort
合并
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array([5, 6, 7, 8])
array([1, 2, 3, 4, 5, 6, 7, 8])
重塑数组
>>> a = np.arange(6)
>>> print(a)
[0 1 2 3 4 5]
>>> b = a.reshape(3, 2)
>>> print(b)
[[0 1]
[2 3]
[4 5]]
基本运算
>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False])
索引
- 除了正常通过中括号数字取,索引还支持数组:
a = np.arange(12)**2
print a
i = np.array([1, 1, 3, 1, 5, 1])
print a[i]
[ 0 1 4 9 16 25 36 49 64 81 100 121]
[ 1 1 9 1 25 1]
- 可以使用py本来数组的操作来操作nparray
>>> data = np.array([1, 2, 3])
>>> data[1]
2
>>> data[0:2]
array([1, 2])
>>> data[1:]
array([2, 3])
>>> data[-2:]
array([2, 3])
- 可以在里面进行计算:
>>> print(a[a < 5])
[1 2 3 4]
深拷贝
a = np.arange(12)**2
d = a.copy() # a new array object with new data is created
d is a #false
Pandas
简介
- pandas主要处理类似于表格一样的结构:
- 每一列DataFrame都是一个Series
引入
- 一般会叫它pd
import pandas as pd
创建
- 使用对象创建一个dataframe:
df = pd.DataFrame(
{
"Name": [
"Braund, Mr. Owen Harris",
"Allen, Mr. William Henry",
"Bonnell, Miss. Elizabeth",
],
"Age": [22, 35, 58],
"Sex": ["male", "male", "female"],
}
)
print df
Age Name Sex
0 22 Braund, Mr. Owen Harris male
1 35 Allen, Mr. William Henry male
2 58 Bonnell, Miss. Elizabeth female
- 创建series:
ages = pd.Series([22, 35, 58], name="Age")
- series没有列标签,它只是相当于一列。
索引
- 也可以通过索引获取series:
df["Age"]
Out[4]:
0 22
1 35
2 58
Name: Age, dtype: int64
- 索引还可以使用iloc , loc , ix 。具体看https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-choice
- 其中iloc会用的比较多:
titanic.iloc[9:25, 2:5]
- 可以筛选出10到25行,3到5列的数据
读取数据
- 我们可以很方便的从excel文件或者csv文件里获取数据转换成dataframe格式:
titanic = pd.read_csv("data/titanic.csv")
titanic.to_excel("titanic.xlsx", sheet_name="passengers", index=False)
titanic = pd.read_excel("titanic.xlsx", sheet_name="passengers")
筛选
- 可以像操作数组一样去使用它
above_35 = titanic[titanic["Age"] > 35]
合并
- 可以把2个表粘在一个表上
air_quality = pd.concat([air_quality_pm25, air_quality_no2], axis=0)