Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧中元素的混合类型';s柱_Python_Numpy_Pandas - Fatal编程技术网

Python 数据帧中元素的混合类型';s柱

Python 数据帧中元素的混合类型';s柱,python,numpy,pandas,Python,Numpy,Pandas,考虑以下三个数据帧: df1 = pd.DataFrame([[1,2],[4,3]]) df2 = pd.DataFrame([[1,.2],[4,3]]) df3 = pd.DataFrame([[1,'a'],[4,3]]) In [56]: map(type,df1[1]) Out[56]: [numpy.int64, numpy.int64] In [57]: map(type,df2[1]) Out[57]: [numpy.float64, numpy.float64] In

考虑以下三个数据帧:

df1 = pd.DataFrame([[1,2],[4,3]])
df2 = pd.DataFrame([[1,.2],[4,3]])
df3 = pd.DataFrame([[1,'a'],[4,3]])
In [56]: map(type,df1[1])
Out[56]: [numpy.int64, numpy.int64]

In [57]: map(type,df2[1])
Out[57]: [numpy.float64, numpy.float64]

In [58]: map(type,df3[1])
Out[58]: [str, int]
以下是
数据帧的第二列的类型:

df1 = pd.DataFrame([[1,2],[4,3]])
df2 = pd.DataFrame([[1,.2],[4,3]])
df3 = pd.DataFrame([[1,'a'],[4,3]])
In [56]: map(type,df1[1])
Out[56]: [numpy.int64, numpy.int64]

In [57]: map(type,df2[1])
Out[57]: [numpy.float64, numpy.float64]

In [58]: map(type,df3[1])
Out[58]: [str, int]
在第一种情况下,所有
int
都被强制转换为
numpy.int64
。好的在第三种情况下,基本上没有铸造。但是,在第二种情况下,整数(
3
)被强制转换为
numpy.float64
;可能是因为另一个数字是浮点数

我如何控制铸造?在第二种情况下,我希望将
[float64,int64]
[float,int]
作为类型

解决方法: 使用一个可调用的打印函数可以有一个解决方法,如图所示


数据帧(或系列)的列的类型是均匀的。您可以使用
dtype
(或
DataFrame.dtypes
)检查此项:

只有泛型的
'object'
dtype可以保存任何python对象,并且以这种方式还可以包含混合类型:

In [18]: df2 = pd.DataFrame([[1,.2],[4,3]], dtype='object')

In [19]: df2[1].dtype
Out[19]: dtype('O')

In [20]: map(type,df2[1])
Out[20]: [float, int]
但这确实不被推荐,因为这违背了熊猫的目的(或至少是表演)


有没有一个原因让int和float同时出现在同一列中?

好吧,这是一个微不足道的原因。有些行可以用
int
表示,有些行只能用
float
表示。表的转置版本可以作为解决方案吗?可能,但是不同行上的int/float应该出现在同一列中。但是,为什么不将所有数据表示为浮动呢?(内存问题?)。因此,内存是一回事,代码之美是第二回事,而打印数据是第二回事。如果
int
表示为
float
,那么当
print
'ed时,会出现恼人的拖尾
.00
“我被教导,如果可以将某个东西表示为int,那么就不要使用float”->,这在一般情况下肯定是正确的,但在numpy(科学python)中不再如此当您想将数据放在同一个数组(本例中为系列)中并对其进行性能分析时,请使用land。如果您关心内存,最好调查一下是否需要int64/float64,因为int32/float32可能就足够了。如果不知道确切的应用程序,很难说。这将取决于你使用熊猫的哪些特征,你的数据集有多大。。但有时使用dicts/list会减少开销。但老实说,在大多数情况下,我都会使用pandas,但您必须面对一列一种格式的问题(或者编写一个自定义打印函数,其中根据每个值分别设置每个值的格式),这是一个不错的笔记本!我认为这是一个非常合理的解决方案,并且很好地使用了
float\u格式
。谢谢!您能否建议对
printFloat
进行任何改进?也许仅仅使用
x%1
也可以代替
np.modf
,而且速度更快,尽管我认为速度不是一个问题(打印的项目数量总是有限的)。