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

清洗DataFrame遇问题:值的dtype为object,如何转为float64?

问题解答:object类型Series转float64及标准DataFrame生成

为什么ajuste_col的dtype是object?

  • ajuste_col里混合了字符串(第一行的"AJUSTE")和特殊格式的数值字符串,pandas无法将这种混合类型的序列自动识别为统一的数值类型,只能用object dtype容纳(object类型可存储任意Python对象,包括字符串和其他类型)。
  • 数值采用拉美/欧洲风格格式:用.做千位分隔符,,做小数分隔符,不符合pandas默认的数值解析规则,即使没有字符串表头,这些值也会被识别为字符串而非数值。

转换为float64并生成标准DataFrame的步骤

步骤1:修正表头与数据行

当前ajuste_col里的"AJUSTE"是列名,后续行才是有效数据,先做表头修正:

# 设置列名并跳过表头行
ajuste_col = ajuste_col.rename(ajuste_col.iloc[0])[1:]

步骤2:转换字符串为float64类型

处理千位分隔符和小数分隔符,再转数值类型:

# 移除千位分隔符,替换小数分隔符,转float64
ajuste_col = ajuste_col.str.replace('.', '', regex=False) \
                     .str.replace(',', '.', regex=False) \
                     .astype('float64')

步骤3:合并为标准DataFrame(与vencto_col组合)

对vencto_col做同样的表头修正后,合并成DataFrame:

# 处理vencto_col的表头和数据
vencto_col = vencto_col.rename(vencto_col.iloc[0])[1:]
# 合并为标准DataFrame
final_df = pd.DataFrame({'VENCTO': vencto_col, 'AJUSTE': ajuste_col})

完整代码示例

import pandas as pd

url = 'https://www2.bmf.com.br/pages/portal/bmfbovespa/boletim1/SistemaPregao_excel1.asp?Data=&Mercadoria=DI1'
df_list = pd.read_html(url)
data_raw = df_list[6].copy().drop([0])

# 处理到期日列
vencto_col = data_raw[0]
vencto_col = vencto_col.rename(vencto_col.iloc[0])[1:]

# 处理调整值列并转换类型
ajuste_col = data_raw[13]
ajuste_col = ajuste_col.rename(ajuste_col.iloc[0])[1:]
ajuste_col = ajuste_col.str.replace('.', '', regex=False) \
                       .str.replace(',', '.', regex=False) \
                       .astype('float64')

# 生成最终DataFrame
final_df = pd.DataFrame({'VENCTO': vencto_col, 'AJUSTE': ajuste_col})

# 查看结果
print(final_df.info())
print(final_df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:36:17