我无法弄清楚为什么是一个简单的函数:
def to_integer(value):
if value == "":
return None
return int(value)
仅当数据框中没有空字符串str
时,才会将值从int
更改为""
,即仅当没有值返回为None
时。
如果我去:
type(to_integer('1')) == int
返回True。
现在,将apply
和to_integer
与df1
一起使用:
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。
答案 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`