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

Pandas含NaN数值列类型识别问题:如何自动检测列数据类型?

Pandas自动检测DataFrame列数据类型的解决方案

方法1:预处理数据,替换字符串缺失值为np.nan

R中的NA是内置缺失值标记,而你代码里的"NA"是字符串,Pandas不会自动识别。先将其替换为Pandas认可的np.nan,就能让列被正确识别为数值型:

import pandas as pd
import numpy as np

data = {
"calories": [np.nan, 380, 390],
"duration": [50, 40, 45]
}

df = pd.DataFrame(data)
print(df.dtypes)
# 输出结果:
# calories    float64
# duration      int64
# dtype: object

方法2:对已生成的DataFrame做列类型转换

如果已经创建了包含字符串"NA"的DataFrame,用pd.to_numeric()强制转换列类型,同时将无效值转为缺失值:

import pandas as pd

data = {
"calories": ["NA", 380, 390],
"duration": [50, 40, 45]
}

df = pd.DataFrame(data)
# 转换calories列,errors='coerce'将无法转为数值的内容转为NaN
df['calories'] = pd.to_numeric(df['calories'], errors='coerce')
print(df.dtypes)
# 输出结果:
# calories    float64
# duration      int64
# dtype: object

方法3:用convert_dtypes()获取更精准的类型

Pandas 1.0及以上版本提供的convert_dtypes(),可以自动推断并转换为更合适的类型,比如支持缺失值的整数类型Int64(区别于默认的float64):

import pandas as pd
import numpy as np

data = {
"calories": [np.nan, 380, 390],
"duration": [50, 40, 45]
}

df = pd.DataFrame(data).convert_dtypes()
print(df.dtypes)
# 输出结果:
# calories    Int64
# duration     int64
# dtype: object

核心要点

Pandas默认不会把字符串"NA"当成缺失值,这是和R的核心差异。只要先将这类字符串形式的缺失值转为np.nan,Pandas就能自动识别出列的正确数值类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:25:22