2019.5.2 近期问题总结

2019.5.2 近期问题总结

pandas 过滤数据后比较

pandas 使用 loc()方法过滤(获取)到的数据不能够直接在if, while, for等语句中和其它常用类型直接比较. 对于一次过滤后的数据,如果需要用上述语句进行比较,需要进行数据类型转换:

1
2
3
rating = int(ratings.loc[(ratings['user_id'] == u) & (ratings['movie_id'] == movie)]['rating'])
if rating >= threshold:
pass

其中,有多个过滤条件时需要用&连接.

使用 list 创建多维数组

使用 list 创建多维数组时,如果对某一 list 直接复制:

1
2
a = [0,1,2]
b = [a] * len(a)

因为单纯的这样复制属于浅拷贝,b中其余各行依旧指向 list a 所在的地址,因此当数组中有一行发生变动时,其余行将会受到影响:

1
2
3
4
5
6
7
for 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
9
a = [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
    6
    A = np.array([1,1,1])
    B = np.array([2,2,2])
    np.vstack((A,B)) # vertical stack
    >>>
    [[1,1,1]
    [2,2,2]]

  • 左右合并

    1. 可以使用np.hstack()方法:

      1
      2
      D = np.hstack((A,B))       # horizontal stack
      >>> [1,1,1,2,2,2]

    2. np.append()方法:

      1
      2
      E = np.append(A,B)         # horizontal stack
      >>> [1,1,1,2,2,2]

  • 转置

    1. 按行转置:

      1
      2
      A[np.nexaxis,:]
      >>> [[1,1,1]]

    2. 按列转置:

      1
      2
      3
      4
      A[:,np.nexaxis]
      >>> [[1],
      [1],
      [1]]

  • concatenate:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a=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可以不写
    >>> array([[ 1, 2, 3],
    [ 4, 5, 6],
    [11, 21, 31],
    [ 7, 8, 9]])
    # 合并列
    np.concatenate((a,b),axis=1)
    >>> array([[ 1, 2, 3, 11, 21, 31],[ 4, 5, 6, 7, 8, 9]])

0%