使用包含多种类型的numpy数组创建数据帧

我想创建一个默认值为零的数据帧,但一列是整数,另一列是浮点。我能够创建具有正确类型的numpy数组,请参见下面的变量。但是,当我将其传递到dataframe构造函数时,它只返回NaN值(请参见下面的df)。我已经包含了返回浮点数组的非类型化代码(请参见df2

将熊猫作为pd导入
将numpy作为np导入
value=np.zero((2,3),dtype='int32,float32')
索引=['x','y']
列=['a'、'b'、'c']
df=pd.DataFrame(数据=值,索引=索引,列=列)
df.values.dtype
值2=np.零((2,3))
df2=pd.DataFrame(数据=值2,索引=索引,列=列)
df2.values.dtype

关于如何构建数据框架有什么建议吗

以下是您可以选择的几个选项:

将numpy导入为np
作为pd进口熊猫
索引=['x','y']
列=['a'、'b'、'c']
#选项1:在结构化数组的数据类型中设置列名
数据类型=[('a','int32'),('b','float32'),('c','float32')]
值=np.zero(2,dtype=dtype)
df=pd.DataFrame(值,索引=index)
#选项2:创建结构化数组后更改其列名
value=np.zero(2,dtype='int32,float32,float32')
values.dtype.names=列
df2=pd.DataFrame(值,索引=索引,列=列)
#选项3:创建数据帧后更改其列名
value=np.zero(2,dtype='int32,float32,float32')
df3=pd.DataFrame(值,索引=索引)
df3.columns=列
#选项4:使用数组的dict,每个数组都具有正确的数据类型:
df4=pd.DataFrame(
{'a':np.zeros(2,dtype='int32'),
“b”:np.zero(2,dtype='float32'),
“c”:np.zero(2,dtype='float32')},index=index,columns=columns)
#选项5:连接简单数据类型的数据帧:
df5=pd.concat([
pd.DataFrame(np.zero((2,),dtype='int32'),columns=['a']),
pd.DataFrame(np.zero((2,2),dtype='float32'),columns=['b','c'])],axis=1)
#选项6:在数据帧形成后更改数据类型。(这不是很有效)
值2=np.零((2,3))
df6=pd.DataFrame(值2,索引=索引,列=列)
对于col,在zip中键入数据(df6.columns'int32 float32'.split()):
df6[col]=df6[col].astype(数据类型)

上述每个选项都会产生相同的结果

a b c
x0 0
y 0 0 0

使用数据类型:

a int32
b浮动32
c.32
数据类型:对象

为什么pd.DataFrame(值,index=index,columns=columns)生成一个带有NAN的数据框

values是一个结构化数组,列名称为f0f1f2

[171]on

:值
Output[172]:
数组([(0,0.0,0.0),(0,0.0,0.0)],
数据类型=[('f0','<i4'),('f1','<f4'),('f2','<f4'))

如果将参数columns=['a','b','c']传递给pd.DataFrame,则Pandas将在结构化数组值中查找具有这些名称的列。如果找不到这些列,熊猫会将NaNs放在数据帧中以表示缺少的值

发表评论