没有小数位的列中的结果?

时间:2017-11-06 08:37:55

标签: python pandas

我查看过很多帖子,但我的代码中没有一个可以实现的解决方案:

x4 = x4.set_index('grupa').T.rename_axis('DANE').reset_index().rename_axis(None,1).round()

之后我得到了结果DataFrame:

             DANE  BAKALIE  NASIONA  OWOCE  WARZYWA
0           ilosc      5.0     94.0   61.0    623.0
1     marza_netto      7.0    120.0   69.0    668.0
2  marza_procent2     32.0     34.0   29.0     27.0

但我想收到:

             DANE  BAKALIE  NASIONA  OWOCE  WARZYWA
0           ilosc        5       94     61      623
1     marza_netto        7      120     69      668
2  marza_procent2       32       34     29       27

我尝试了replace('.0','')int(round()astype(int),但我没有取得好成绩,或者我发现属性与DataFrame不兼容。

2 个答案:

答案 0 :(得分:2)

如果只有非数字列为DANE,则在转换为列之前进行转换:

x4 = x4.set_index('grupa')
       .T
       .rename_axis('DANE')
       .astype(int)
       .reset_index()
       .rename_axis(None,1)

更一般的解决方案是选择所有浮点列和强制转换:

cols = df.select_dtypes(include=['float']).columns
df[cols] = df[cols].astype(int)
print (df)
             DANE  BAKALIE  NASIONA  OWOCE  WARZYWA
0           ilosc        5       94     61      623
1     marza_netto        7      120     69      668
2  marza_procent2       32       34     29       27

如果某些NaN s值无法转换为int

所以可能:

1.丢弃所有NaNs行:

df = df.dropna()

2.将NaNs替换为某个整数,如0

df = df.fillna(0)

答案 1 :(得分:2)

不是100%确定我收到了您的问题,但您可以使用astype(int)转化。

df = df.set_index('DANE').astype(int).reset_index()
df

             DANE  BAKALIE  NASIONA  OWOCE  WARZYWA
0           ilosc        5       94     61      623
1     marza_netto        7      120     69      668
2  marza_procent2       32       34     29       27

如果您正在处理具有NaN的行,请删除这些行并进行转换,或转换为astype(object)。不建议使用后者,因为你会失去性能。