我不明白为什么一个简单的函数:
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)
它返回一列 float (np.float64
)。
是否可以同时拥有一个包含整数和 None
的数据帧?
我使用 Python 3.3 和 Pandas 0.12。
最佳答案
你说得完全正确,不可能有一系列 int 和 np.nan 值。
numpy实现缺失值的方式为np.float64
http://pandas.pydata.org/pandas-docs/dev/missing_data.html .
文档的相关部分如下:
“虽然 pandas 支持存储整数和 bool 类型的数组,但这些类型无法存储丢失的数据。在我们可以切换到使用 NumPy 中的 native NA 类型之前,我们已经建立了一些重新索引时的“转换规则”导致丢失的数据被引入到例如 Series 或 DataFrame 中。它们是:
`data type Cast to`
`integer float`
`boolean object`
`float no cast`
`object no cast`
关于python - 为什么 pandas 中使用的函数行为会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20351099/