2019.5.2 近期问题总结
pandas 过滤数据后比较
pandas 使用 loc()
方法过滤(获取)到的数据不能够直接在if, while, for
等语句中和其它常用类型直接比较. 对于一次过滤后的数据,如果需要用上述语句进行比较,需要进行数据类型转换: 1
2
3rating = int(ratings.loc[(ratings['user_id'] == u) & (ratings['movie_id'] == movie)]['rating'])
if rating >= threshold:
pass
其中,有多个过滤条件时需要用&
连接.
使用 list 创建多维数组
使用 list 创建多维数组时,如果对某一 list 直接复制: 1
2a = [0,1,2]
b = [a] * len(a)
因为单纯的这样复制属于浅拷贝,b中其余各行依旧指向 list a 所在的地址,因此当数组中有一行发生变动时,其余行将会受到影响: 1
2
3
4
5
6
7for i in range(len(b)):
for j in range(len(b)):
if i == j:
continue
b[i][j] += 3
b
6, 7, 8], [6, 7, 8], [6, 7, 8]] [[
当需要用 list 创建多维数组时,采用: 1
2
3
4
5
6
7
8
9a = [0,1,2]
b = [[0 for i in range(len(a))] for i in range(len(a))]
for i in range(len(b)):
for j in range(len(b)):
if i == j:
continue
b[i][j] += 3
b
0, 3, 3], [3, 0, 3], [3, 3, 0]] [[
当某行发生变化时其余数据不受影响.
numpy 合并/拼接 array
按行(上下)合并 将多个一维数组按行合并为多维时,可以采用
np.vstack()
方法:1
2
3
4
5
6A = np.array([1,1,1])
B = np.array([2,2,2])
np.vstack((A,B)) # vertical stack
[[1,1,1]
[2,2,2]]左右合并
可以使用
np.hstack()
方法:1
2D = np.hstack((A,B)) # horizontal stack
1,1,1,2,2,2] [np.append()
方法:1
2E = np.append(A,B) # horizontal stack
1,1,1,2,2,2] [
转置
按行转置:
1
2A[np.nexaxis,:]
1,1,1]] [[按列转置:
1
2
3
4A[:,np.nexaxis]
1], [[
[1],
[1]]
concatenate:
1
2
3
4
5
6
7
8
9
10
11a=np.array([[1,2,3],[4,5,6]])
b=np.array([[11,21,31],[7,8,9]])
# 合并行
np.concatenate((a,b,c),axis=0) # 默认情况下,axis=0可以不写
1, 2, 3], array([[
[ 4, 5, 6],
[11, 21, 31],
[ 7, 8, 9]])
# 合并列
np.concatenate((a,b),axis=1)
1, 2, 3, 11, 21, 31],[ 4, 5, 6, 7, 8, 9]]) array([[