为啥我的输出总是以 NaN 的形式出现,我期待输出作为我的系列数据?
Posted
技术标签:
【中文标题】为啥我的输出总是以 NaN 的形式出现,我期待输出作为我的系列数据?【英文标题】:why my output is coming as NaN always , i am expecting output as my series data?为什么我的输出总是以 NaN 的形式出现,我期待输出作为我的系列数据? 【发布时间】:2019-12-20 13:26:34 【问题描述】:我正在尝试下面的代码并为输出中的所有列/行获取 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'的系列数据的数据
试图在论坛上找到任何类似的问题,但找不到任何问题。
【问题讨论】:
【参考方案1】:问题是索引对齐,这意味着原始列名称是从0
到N
从Series
的索引值创建的,所以如果在列表中定义另一个值它不匹配并且pandas 在数据中返回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
您还可以在 Series 中指定索引名称:
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
【讨论】:
【参考方案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
【讨论】:
以上是关于为啥我的输出总是以 NaN 的形式出现,我期待输出作为我的系列数据?的主要内容,如果未能解决你的问题,请参考以下文章