我正在尝试下面的代码,并为输出中的所有列/行获取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'的系列数据的数据
也试图在论坛上找到任何类似的问题,但找不到任何问题。
答案 0 :(得分:2)
问题是索引alignmenet,这意味着原始列名称是从0
的索引值创建的N
到Series
,因此,如果在列表中定义另一个值则不匹配,并且熊猫返回数据中的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