为什么我的输出总是以NaN的形式出现,我希望输出是我的系列数据?

时间:2019-12-20 13:26:34

标签: python pandas numpy

我正在尝试下面的代码,并为输出中的所有列/行获取NaN

将numpy导入为np 将熊猫作为pd导入

data1 = np.array([1,2,4,5,6])
data2 = np.array([11,12,14,15,16])
ser1 = pd.Series(data1)
ser2 = pd.Series(data2)
ser4 = pd.Series(data1)

dataframe = pd.DataFrame([ser1,ser2,ser2],['a','b','c'])

Output is : 

    0   1   2   3   4
a   1   2   4   5   6
b   11  12  14  15  16
c   11  12  14  15  16

但是对于下面的代码,我将获得输出中所有数据的NaN

dataframe = pd.DataFrame([ser1,ser2,ser2,ser4],['a','b','c','d'],['AA','BB','CC','DD','EE'])

AA  BB  CC  DD EE
a   NaN NaN NaN NaN NaN
b   NaN NaN NaN NaN NaN
c   NaN NaN NaN NaN NaN
d   NaN NaN NaN NaN NaN

我原本希望输出应该是分别具有列名'AA','BB','CC','DD','EE'的系列数据的数据

也试图在论坛上找到任何类似的问题,但找不到任何问题。

2 个答案:

答案 0 :(得分:2)

问题是索引alignmenet,这意味着原始列名称是从0的索引值创建的NSeries,因此,如果在列表中定义另一个值则不匹配,并且熊猫返回数据中的NaN。

可能的解决方案是可以通过新的列名称创建每个系列的索引值:

data1 = np.array([1,2,4,5,6])
data2 = np.array([11,12,14,15,16])
i = ['AA','BB','CC','DD','EE']

ser1 = pd.Series(data1, index=i)
ser2 = pd.Series(data2, index=i)
ser4 = pd.Series(data1, index=i)

dataframe = pd.DataFrame([ser1,ser2,ser2],['a','b','c'])
print (dataframe)
   AA  BB  CC  DD  EE
a   1   2   4   5   6
b  11  12  14  15  16
c  11  12  14  15  16

您还可以在系列中指定索引名称:

ser1 = pd.Series(data1, index=i, name='a')
ser2 = pd.Series(data2, index=i, name='b')
ser4 = pd.Series(data1, index=i, name='c')

dataframe = pd.DataFrame([ser1,ser2,ser2])
print (dataframe)
   AA  BB  CC  DD  EE
a   1   2   4   5   6
b  11  12  14  15  16
b  11  12  14  15  16

答案 1 :(得分:2)

您可以通过使用 np.vstack 堆叠为数组来忽略系列的索引,这将使您可以设置自己的索引和列:

pd.DataFrame(np.vstack([ser1,ser2,ser2,ser4]),['a','b','c','d'],['AA','BB','CC','DD','EE'])

   AA  BB  CC  DD  EE
a   1   2   4   5   6
b  11  12  14  15  16
c  11  12  14  15  16
d   1   2   4   5   6