请查看代码并输出。
我可以知道为什么* _state列中的数据类型是float而不是int以及如何将这些数据类型转换为int吗?
谢谢
代码
print(df_test)
for idx, row in df_test.iterrows():
print(type(row['value']))
df_test.at[idx, row['name'] + '_state'] = row['value']
print(df_test)
输出
Message name value 0 Door_Started Door 1 1 Light_open Light 1 type 'int' type 'int' Message name value Door_state Light_state 0 Door_Started Door 1 1.0 NaN 1 Light_open Light 1 NaN 1.0
答案 0 :(得分:1)
您仅将整数分配给单个列row['name'] + '_state'
。对于任何给定的索引,这将导致NaN
值出现在其他列中。
NaN
被认为是float
(see here why),因此int
和NaN
值的混合总是会被投射到float
< sup> 1 ,用于任何给定的系列。您可以自己检查:
type(np.nan) # float
这通常不会破坏后续的操作/计算,并且保持序列float
是有效的。无法将此类序列转换为int
,并且解决方法效率不高。因此,我建议您什么也不做。
1 在docs中描述了这种调节性行为:
注意:在处理异构数据时,将选择结果ndarray的dtype容纳所有数据 参与。例如,如果涉及字符串,则结果将为 对象dtype。如果只有浮点数和整数,则结果 数组将为float dtype。
答案 1 :(得分:0)
在代码后使用:
pd.options.display.float_format = '{:,.0f}'.format
print(df)
@Jpp是正确的。这只会改变您的视觉效果,因此您可以打印1而不是1.0
如果使用此解决方案,请确保您也了解pd.reset_option https://pandas.pydata.org/pandas-docs/stable/options.html