python - 从数据框中替换表中的 NaN 值而不更改其他值
问题描述
我从代码下面使用的数据框创建了数据透视表
table = pd.pivot_table(df_table, values=['KPI Amount Convert to USD'], index=['Customer Nick', 'Customer',
'Customer Name', 'BSO Name', 'BSO Comment',
'Pay Date, Recovery action, No pay schedule reason '],
columns=['Range'], aggfunc={'KPI Amount Convert to USD': np.sum}, margins=True,
margins_name='Grand Total')
它工作得很好,但有些值是 NaN(其他是常规数字)
当我使用
table = table.replace(np.nan, '', regex=True)
NaN 值为空,但某些值已更改为 3.0176e+06,甚至在它为 3017601.99 之前。
你知道如何替换 NaN 值,但保留其他的 int 格式吗?
谢谢你的建议
解决方案
这里的问题是dtype
列的(数据类型),或者更确切地说是底层 numpy 数组。我假设在您的table
数据框中,包含 NaN 值的列具有浮点类型(float64)。
如果您将 NaN 替换为 0.,一切都会好起来的,但如果您想在那里写一个空字符串,Pandasdtype
会将object
.
顺便说一句,3.0176e+06 只是 3017601.99 的不同表示,但我认为该值没有改变。简单地说,pandas 对np.float64
类型列和object
类型列使用不同的表示。
您可以通过设置相关选项要求它对列中的str
浮点值使用默认转换:object
pd.set_option('display.float_format', str)
演示:
>>> pd.set_option('display.float_format', None) # reset option
>>> df = pd.DataFrame([[3017601.99], [np.nan]], columns=['A'])
>>> df
A
0 3017601.99
1 NaN
>>> df1 = df.fillna('')
>>> df1
A
0 3.0176e+06
1
>>> pd.set_option('display.float_format', str) # set the option
>>> df1
A
0 3017601.99
1
>>> df.loc[0,'A'] == df1.loc[0,'A']
True
推荐阅读
- mysql - 连接表并获取特定记录的计数
- excel - 使用 VBA 刷新单个查询的最佳选择
- vba - 过滤表后VBA检查没有结果
- mysql - 如何使用 redis 缓存用户的喜欢和收藏?
- reactjs - React Router 中的 enocde uri
- python - 根据来自scrapy的信号更新主线程内的PyQt5 Gui
- octave - 如何从向量推导出左侧矩阵?
- android - 一个应用中的多个 Firebase 项目(在多个 Firebase 帐户中)
- node.js - 使用 model.save() 在 mongoose 中同时更新用户会引发错误
- python-3.x - 有没有办法在 Azure Notebooks/Google Collab 上输入麦克风?