在操作Table、Matrix、Dataframe这些数据的时候,都离不开二维数组的问题,在此记录一下遇到的几个问题
浅拷贝问题
也就是在列表的复制时,嵌套结构不会被复制过去,如下:
>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
官方简历创建一个定长列表可以这么做:
>>> lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]
二维数组的创建
列表生成式:两个for循环创建
>>> test = [[0 for i in range(m)] for j in range(n)]
or
>>> test = [[0] * 5 for i in range(2)]
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
使用Numpy创建:指定行、列生成
>>> import numpy as np
>>> test = np.zeros((m, n), dtype=np.int)
DataFrame转二维数组
如果要去掉columns和index直接获取DataFrame中的值,可以这样:
>>> test = pd.DataFrame(columns=['1', '2', '3'], index=['a', 'b', 'c'])
123
aNaNNaNNaN
bNaNNaNNaN
cNaNNaNNaN
>>> test_array = test.values
array([[nan, nan, nan],
[nan, nan, nan],
[nan, nan, nan]], dtype=object)
如果要创建DataFrame,也可以先通过ndarray来创建(使用列表生成同理):
>>> import numpy as np
>>> import pandas as pd
>>> test = np.zeros((m, n), dtype=np.int)
>>> test_dataframe = pd.DataFrame(test)
参考资料: