numpy
- 将布尔数组作为掩码
使用布尔数组作为掩码,通过该掩码选择数据的子数据集。
x = np.array([[5, 0, 3, 3], [7, 9, 3, 5], [2, 4, 7, 6]])
print(x<5)
x_new = x[x < 5]
- 排序
np.sort 的排序算法是快速排序,时间复杂度O(NlogN)
x = np.array([1,8,4,5,3])
np.sort(x)
y = np.array([1,8,4,5,3])
i = np.argsort(y) # 返回原始数组排好序的索引值。
部分排序:有时候我们不希望对整个数组进行排序,仅仅希望找到数组中第 K 小的值,NumPy 的 np.partition 函数提供了该功能。np.partition 函数的输入是数组和数字 K,输出结果是
一个新数组,最左边是第 K 小的值,往右是任意顺序的其他值:
x = np.array([7, 2, 3, 1, 6, 5, 4])
np.partition(x, 3)
- 实现更高级的复合类型
NumPy 中也可以定义更高级的复合数据类型。例如,你可以创建一种类型,其中每个元素都包含一个数组或矩阵。我们会创建一个数据类型,该数据类型用 mat 组件包含一个 3×3
的浮点矩阵:
tp = np.dtype([('id', 'i8'), ('mat', 'f8', (3, 3))])
X = np.zeros(1, dtype=tp)
print(X[0])
print(X['mat'][0])
pandas
DataFrame 是一组Series对象的集合。
- 创建DataFrame对象
#1.通过单个Series对象创建具有一个单列的DataFrame对象
import pandas as pd
population_dict = {'California': 38332521,
'Texas': 26448193,
'New York': 19651127,
'Florida': 19552860,
'Illinois': 12882135}
population = pd.Series(population_dict)
pd.DataFrame(population, columns=['population'])
#2. 通过字典列表创建。任何元素是字典的列表都可以变成 DataFrame。
data = [{'a': i, 'b': 2 * i} for i in range(3)]
pd.DataFrame(data)
#3. 通过 Series 对象字典创建。
states = pd.DataFrame({'population': population, 'area': area})
#4.通过 NumPy 二维数组创建。假如有一个二维数组,就可以创建一个可以指定行列索引值的 DataFrame。如果不指定行列索引值,那么行列默认都是整数索引值
pd.DataFrame(np.random.rand(3, 2),
columns=['foo', 'bar'],
index=['a', 'b', 'c'])
#5.通过 NumPy 结构化数组创建
A = np.zereos(3,dtype=[('A','i8')('B','f8')]) # 8:int,f8:float
pd.DataFrame(A)
- 索引器:loc,iloc,ix
显式索引和隐式索引
data = pd.Series(['a', 'b', 'c'], index=[1, 3, 5])
#1 loc,表示取值和切片都是显式的。通过行标签索引数据
data.loc[1] # ‘a’
data.loc[1:3] # a b
#2 iloc 取值和切片都是python形式的隐式索引。通过行号索引行数据
data.iloc[1] # b
data.iloc[1:3] # b c # 等价于列表取值
# ix,loc 和 iloc的混合,主要用于DataFrame对象。 通过行标签或行号索引数据(基于loc和iloc的混合)已经被弃用。