【问题标题】:Pandas: Best way to remove NaN from multiple columns and convert them to intPandas:从多列中删除 NaN 并将它们转换为 int 的最佳方法
【发布时间】:2018-11-09 14:51:09
【问题描述】:

假设我有以下 CSV 数据:

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

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

我可以使用this 并转换我的过滤数据框,它只有数字列(col1、col2、col3)。如何修改主数据框本身而忽略作为字符串的标签列?

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

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

【问题讨论】:

标签: python pandas


【解决方案1】:

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

【讨论】:

  • 读者注意:select_dtypes 将返回一个新的 DataFrame 并从中选择列。
  • @coldspeed - 当然,有什么问题?
  • 没问题,刚刚提给觉得内存效率很重要的读者:)
【解决方案2】:

您可以将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

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 2014-02-12
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多