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
,而且速度更快,尽管我认为速度不是一个问题(打印的项目数量总是有限的)。