为什么pandas中使用的函数行为会应用更改?

时间:2013-12-03 12:23:05

标签: python string pandas int dataframe

我无法弄清楚为什么是一个简单的函数:

def to_integer(value):
    if value == "":
        return None
    return int(value)
仅当数据框中没有空字符串str时,

才会将值从int更改为"",即仅当没有值返回为None时。

如果我去:

type(to_integer('1')) == int

返回True。

现在,将applyto_integerdf1一起使用:

df1 = pd.DataFrame(['1', '2', '3'], columns=['integer'])
result = df1['integer'].apply(to_integer)

给出整数列(np.int64)。

但如果我将它应用于此df2

df2 = pd.DataFrame(['1', '', '3'], columns=['integer'])
result = df2['integer'].apply(to_integer)

它返回一列浮点数(np.float64)。

是否有可能同时拥有一个整数和None的数据框?

我使用Python 3.3和Pandas 0.12。

1 个答案:

答案 0 :(得分:1)

你是完全正确的,不可能有一系列的int和np.nan值。

numpy实现缺失值的方式是np.float64

http://pandas.pydata.org/pandas-docs/dev/missing_data.html

文件的相关部分如下:

“虽然pandas支持存储整数和布尔类型的数组,但这些类型不能存储丢失的数据。在我们可以切换到在NumPy中使用本机NA类型之前,我们已经建立了一些”转换规则“,当重建索引时导致缺少数据,例如,系列或DataFrame。这里是:

`data type  Cast to`
`integer    float`
`boolean    object`
`float  no cast`
`object no cast`