You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python导出CSV至R:空白值转缺失值及NaN数量差异问题

我来帮你一步步解决这两个问题:

1. 让R正确识别CSV中的空白为缺失值

Python导出CSV时,DataFrame里的NaN会被存成空单元格,但R默认导入时,不会把所有空单元格都当成缺失值(NA)——这取决于列的数据类型和导入函数的参数。你可以用两种方法解决:

  • 基础R的read.csv():必须指定na.strings参数,把空字符串和常见的缺失标记都包含进去,这样R会自动把这些内容转换成NA:

    df <- read.csv("你的文件路径.csv", na.strings = c("", "NA"))
    
  • tidyverse的read_csv()(更推荐,因为默认处理更智能):它默认就会把空单元格识别为NA,如果有特殊缺失标记,也可以用na参数补充:

    library(readr)
    df <- read_csv("你的文件路径.csv", na = c("", "NA"))
    
2. 为什么缺失值数量和Python里差这么多?

你遇到的sum(is.na(df))=9但Python里有3545个NaN,大概率是这几个原因:

  • 导入时没设置缺失值参数:如果直接用默认的read.csv()导入,R只会把数值型列里的空单元格转成NA,而字符型列里的空单元格会被保留成空字符串(""),is.na()是不会统计这些空字符串的——这就导致大部分缺失值没被算进去。
  • 列类型被自动转换:R导入时可能把一些本该是数值型的列转换成了字符型(比如列里有混合的数字和文本),这些列里的空单元格就变成了"",同样不会被is.na()识别。

你可以验证一下:先运行str(df)查看各列的数据类型,再用sum(df == "")统计字符型空字符串的数量,把这个数加上sum(is.na(df)),应该就和Python里的3545接近了。

另外你提到的isblank(df) <- NaN是不存在的R命令,事后处理空字符串的话可以用这段代码,但还是建议从导入环节解决更高效:

# 把所有列里的空字符串替换成NA
df[] <- lapply(df, function(col) ifelse(col == "", NA, col))

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:34:52