np.arange在调整大小时创建一个空值矩阵

时间:2018-10-30 18:25:07

标签: python numpy

以下是我正在使用的代码:

while

我得到的输出是:

do-while

我期望的输出是:

import numpy as np
import pandas as pd
from pandas import DataFrame, Series
animals = DataFrame(np.arange(16).resize(4, 4), columns=['W', 'X', 'Y', 'Z'], index=['Dog', 'Cat', 'Bird', 'Mouse'])
print(animals)

但是,如果我只跑:

         W    X    Y    Z
Dog    NaN  NaN  NaN  NaN
Cat    NaN  NaN  NaN  NaN
Bird   NaN  NaN  NaN  NaN
Mouse  NaN  NaN  NaN  NaN

我得到的输出是:

         W    X    Y    Z
Dog      0    1    2    3
Cat      4    5    6    7
Bird     8    9   10   11
Mouse    12   13   14   15

3 个答案:

答案 0 :(得分:3)

使用reshape

import pandas as pd
animals = pd.DataFrame(np.arange(16).reshape(4, 4), columns=['W', 'X', 'Y', 'Z'], index=['Dog', 'Cat', 'Bird', 'Mouse'])
print(animals)

或使用numpy.resize()

np.resize(np.arange(16),(4, 4))

使用调整大小,您需要将数组作为参数传递

import pandas as pd
animals = pd.DataFrame(np.resize(np.arange(16),(4, 4)), columns=['W', 'X', 'Y', 'Z'], index=['Dog', 'Cat', 'Bird', 'Mouse'])
print(animals)

ndarray.resize()将执行就地操作。因此,预先计算大小,然后创建一个数据框

a=np.arange(16)
a.resize(4,4)
import pandas as pd
animals = pd.DataFrame(a, columns=['W', 'X', 'Y', 'Z'], index=['Dog', 'Cat', 'Bird', 'Mouse'])
print(animals)

答案 1 :(得分:3)

摘自resize的文档:“就地更改数组的形状和大小。” 因此,您对resize的调用将返回None

您想要reshape。如np.arange(16).reshape(4, 4)

答案 2 :(得分:1)

只需添加到以上答案中,docs代表resize

ndarray.resize(new_shape, refcheck=True)
     

就地更改数组的形状和大小。

因此,与reshape不同,resize不会创建新的数组。实际上np.arange(16).resize(4, 4)会产生None,这就是为什么要获得Nan值的原因。

使用reshape返回一个新数组:

 ndarray.reshape(shape, order='C')
     

以新形状返回包含相同数据的数组