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

从Google表格导入数据时Pandas DataFrame的数据类型问题

解决Google表格导入Pandas时的类型识别问题

先解决你遇到的TypeError错误

你用df = pd.DataFrame(data, dtype=data_types)时触发报错,核心原因是**data_types的格式不符合要求**:

  • Pandas的DataFrame构造器的dtype参数,要么接受单一类型(所有列统一用该类型),要么接受列名映射到类型的字典。
  • 如果你的data_types是列表(比如[str, float, ...])或者格式错误,就会抛出object of type 'type' has no len()的错误。

正确的类型处理流程

由于源数据存在空白值,直接在创建DataFrame时强制指定类型容易失败,更稳妥的方式是先导入数据,再针对性转换类型:

1. 先正常导入数据

以gspread获取Google表格数据为例:

import gspread
import pandas as pd
from google.oauth2.service_account import Credentials

# 初始化授权(根据你的认证方式调整)
scopes = ["https://www.googleapis.com/auth/spreadsheets"]
creds = Credentials.from_service_account_file("你的认证文件.json", scopes=scopes)
client = gspread.authorize(creds)

# 获取表格数据并转为DataFrame
sheet = client.open("你的表格名称").sheet1
data = sheet.get_all_records()
df = pd.DataFrame(data)

2. 分类型转换列

  • 浮点数列:用pd.to_numeric将空白值转为NaN,避免类型识别错误:
    # 替换成你的浮点数列名列表
    float_columns = ['列名1', '列名2', ...]
    for col in float_columns:
        df[col] = pd.to_numeric(df[col], errors='coerce')
    
  • 日期列:用pd.to_datetime解析日期,同样处理空白值:
    # 替换成你的日期列名列表
    date_columns = ['日期列名1', '日期列名2', ...]
    for col in date_columns:
        df[col] = pd.to_datetime(df[col], errors='coerce')
    
  • 文本列:如果需要显式转为string类型(而非默认的object):
    text_columns = ['文本列名1', '文本列名2', ...]
    df[text_columns] = df[text_columns].astype('string')
    

3. (可选)创建时指定类型的正确方式

如果一定要在创建DataFrame时指定类型,确保data_types是列名-类型的字典,例如:

data_types = {
    '文本列1': 'string',
    '数值列1': float,
    '日期列1': 'datetime64[ns]'
}
df = pd.DataFrame(data, dtype=data_types)

⚠️ 注意:这种方式对含空白值的列容易报错,因为空字符串无法直接转为float或datetime,因此更推荐先导入再转换的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:17:02