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

如何在Pandas中为含缺失值的列表数据自动匹配正确数值类型?

解决Pandas DataFrame列类型全为object的数值转换问题

这个问题很常见——当你的数据里混有空字符串和数值格式的字符串时,Pandas会默认把列设为object类型。不过有几种简单的方法可以帮你把数值列转成正确的int/float类型,同时处理那些缺失值,我给你详细说下:

方法一:用pd.to_numeric手动转换(灵活可控)

首先要处理数据里的空字符串'',因为Pandas不会把它识别为缺失值NaN,直接转换会报错。我们先把空字符串替换成NaN,再逐列尝试转换为数值类型:

import pandas as pd
import numpy as np

# 第一步:将所有空字符串替换为NaN,这是转换数值类型的前提
df = df.replace('', np.nan)

# 第二步:遍历每一列,尝试转换为数值类型
for col in df.columns:
    try:
        # 尝试转换,无法转换的(比如时间列)会抛出ValueError,我们跳过
        df[col] = pd.to_numeric(df[col])
    except ValueError:
        continue

# 查看转换后的列类型
print(df.dtypes)

如果你想更简洁,可以用apply配合errors='ignore'参数——这个参数会让无法转换的列保持原类型:

df = df.replace('', np.nan)
df = df.apply(lambda x: pd.to_numeric(x, errors='ignore') if x.dtype == object else x)

方法二:用convert_dtypes自动推断(懒人友好)

Pandas 1.0+版本提供了convert_dtypes方法,它会自动推断每列最合适的类型,包括支持缺失值的Nullable整数类型(比如Int64,注意大写I,和普通int64的区别是可以存NaN):

import pandas as pd
import numpy as np

# 同样先替换空字符串为NaN
df = df.replace('', np.nan)
# 自动转换类型
df = df.convert_dtypes()

print(df.dtypes)

这个方法的好处是不用手动判断哪些列是数值型,Pandas会帮你搞定,而且会优先用支持缺失值的Nullable类型,避免把整数列转成float类型(因为普通int不能存NaN,只能转成float)。

额外:处理时间列

你的数据里有Time列,它是时间格式的字符串,可以单独转成datetime类型:

df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S.%f')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:40:26