python dataframe.at分配,数据类型更改

时间:2018-09-06 09:02:04

标签: python python-3.x pandas

请查看代码并输出。

我可以知道为什么* _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

2 个答案:

答案 0 :(得分:1)

您仅将整数分配给单个列row['name'] + '_state'。对于任何给定的索引,这将导致NaN值出现在其他列中。

NaN被认为是floatsee here why),因此intNaN值的混合总是会被投射到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