熊猫:从多列中删除NaN并将其转换为int的最佳方法

时间:2018-11-09 06:45:55

标签: python pandas

假设我有以下CSV数据:

col1,col2,col3,label
,1,2,label1
3,,4,label2
5,6,7,label3

读取此数据并将可浮动的col1和col2转换为int的最佳方法是什么。

我可以使用this并转换仅包含数字列(col1,col2,col3)的过滤数据框。如何修改主数据框本身而忽略字符串为label的列?

在相关说明中,我也可以使用以下命令。我知道如何循环运行它,以便动态生成变量名col%d,因为我有32列。

filter_df.col1 = filter_df.col1.fillna(0).astype(int)

2 个答案:

答案 0 :(得分:5)

select_dtypesnp.number一起使用:

print (filter_df)
   col1  col2  col3   label
0   NaN   1.0     2     NaN
1   3.0   NaN     4  label2
2   5.0   6.0     7  label3

cols = filter_df.select_dtypes(np.number).columns
filter_df[cols] = filter_df[cols].fillna(0).astype(int)

print (filter_df)
   col1  col2  col3   label
0     0     1     2     NaN
1     3     0     4  label2
2     5     6     7  label3

答案 1 :(得分:4)

您可以将fillnadowncast='infer'一起使用。

m = df.dtypes == np.number
df.loc[:, m] = df.loc[:, m].fillna(0, downcast='infer')
print(df)
   col1  col2  col3   label
0     0     1     2     NaN
1     3     0     4  label2
2     5     6     7  label3