簡體   English   中英

DataFrame列中混合的元素類型

[英]Mixed types of elements in DataFrame's column

考慮以下三個DataFrame

df1 = pd.DataFrame([[1,2],[4,3]])
df2 = pd.DataFrame([[1,.2],[4,3]])
df3 = pd.DataFrame([[1,'a'],[4,3]])

以下是DataFrame的第二列的類型:

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]作為類型。

解決方法:

使用可調用打印功能可以有一個替代方案來顯示在這里

def printFloat(x):
    if np.modf(x)[0] == 0:
        return str(int(x))
    else:
        return str(x)
pd.options.display.float_format = printFloat

pandas DataFrame(或系列)的列是同類型的。 你可以檢查此dtype (或DataFrame.dtypes ):

In [14]: df1[1].dtype
Out[14]: dtype('int64')

In [15]: df2[1].dtype
Out[15]: dtype('float64')

In [16]: df3[1].dtype
Out[16]: dtype('O')

只有通用'object' 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]

但實際上不建議這樣做,因為這會破壞大熊貓的目的(或至少表現)。

您是否有理由在同一列中特別想要整數和浮點數?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM