在 pandas 中的整数数据框中使用 DataFrame.at 分配 nan 值时出现 ValueError
ValueError when assigning nan values using DataFrame.at in an integer data frame in pandas
我有以下 DataFrame
由整数值组成:
df = pd.DataFrame(data=1, columns=['a','b'], index=[1,2,3])
a b
1 1 1
2 1 1
3 1 1
我想在单个单元格上设置缺失值,当我尝试时:
df.at[1,'a'] = np.nan
然后我得到这个异常:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "pandas/core/indexing.py", line 2159, in __setitem__
self.obj._set_value(*key, takeable=self._takeable)
File "pandas/core/frame.py", line 2582, in _set_value
engine.set_value(series._values, index, value)
File "pandas/_libs/index.pyx", line 124, in pandas._libs.index.IndexEngine.set_value
File "pandas/_libs/index.pyx", line 133, in pandas._libs.index.IndexEngine.set_value
File "pandas/_libs/index.pyx", line 570, in pandas._libs.index.convert_scalar
ValueError: Cannot assign nan to integer series
如果设置 NaN
s,函数 DataFrame.at
似乎无法将整数转换为浮点数。
我工作DataFrame.loc
:
df.loc[1,'a'] = np.nan
print (df)
a b
1 NaN 1
2 1.0 1
3 1.0 1
@Peter Leimbigler 解释:
The reason why any type-casting is needed in the first place is because nan is of type float, and the int data type has no support for nan or any other missing value. In order for a numeric column to contain nan, it must be of type float.
@pir 解释:
pandas.DataFrame.at is optimized for specific cell access. Therefore it cannot change the dtype of the column. However, loc
can.
添加astype
df.a=df.a.astype(float)
df.at[1,'a']=np.nan
df
Out[43]:
a b
1 NaN 1
2 1.0 1
3 1.0 1
我有以下 DataFrame
由整数值组成:
df = pd.DataFrame(data=1, columns=['a','b'], index=[1,2,3])
a b
1 1 1
2 1 1
3 1 1
我想在单个单元格上设置缺失值,当我尝试时:
df.at[1,'a'] = np.nan
然后我得到这个异常:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "pandas/core/indexing.py", line 2159, in __setitem__
self.obj._set_value(*key, takeable=self._takeable)
File "pandas/core/frame.py", line 2582, in _set_value
engine.set_value(series._values, index, value)
File "pandas/_libs/index.pyx", line 124, in pandas._libs.index.IndexEngine.set_value
File "pandas/_libs/index.pyx", line 133, in pandas._libs.index.IndexEngine.set_value
File "pandas/_libs/index.pyx", line 570, in pandas._libs.index.convert_scalar
ValueError: Cannot assign nan to integer series
如果设置 NaN
s,函数 DataFrame.at
似乎无法将整数转换为浮点数。
我工作DataFrame.loc
:
df.loc[1,'a'] = np.nan
print (df)
a b
1 NaN 1
2 1.0 1
3 1.0 1
@Peter Leimbigler 解释:
The reason why any type-casting is needed in the first place is because nan is of type float, and the int data type has no support for nan or any other missing value. In order for a numeric column to contain nan, it must be of type float.
@pir 解释:
pandas.DataFrame.at is optimized for specific cell access. Therefore it cannot change the dtype of the column. However,
loc
can.
添加astype
df.a=df.a.astype(float)
df.at[1,'a']=np.nan
df
Out[43]:
a b
1 NaN 1
2 1.0 1
3 1.0 1