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

Pandas读取CSV时数值列出现多余.0的问题及疑问

问题解答

疑问1:为何CSV文件存在空行时,数值列会出现.0?

当CSV中存在空行时,对应行的Order No.列单元格为空值。Pandas读取数据时,整数类型无法存储空值,因此会自动将该列的数据类型从int转换为float(因为float类型可以用NaN表示空值)。原本的整数会被强制转换为浮点数形式,所以输出时就会带上.0。

疑问2:为何重命名列后无法成功转换数据类型?

你尝试的v_df[['Order_Id']] = v_df[['Order_Id']].values.astype('str')并不是转换失败,而是转换逻辑不对:

  • 此时Order_Id列的 dtype 是float,直接转字符串会把149545961155429.0这种浮点数原样转为字符串,自然保留.0。
  • 另外,用.values返回的是numpy数组,直接赋值会绕开Pandas的类型推断,但核心问题是没先处理浮点数的小数部分。

解决方案(去除.0)

方案1:读取阶段直接指定原列类型(推荐)

不需要纠结重命名的问题,先在读取CSV时指定原列Order No.的类型,之后再重命名即可:

import pandas as pd

# 方法A:指定为字符串类型
v_df = pd.read_csv('csvfile', delimiter=';', dtype={'Order No.': 'str'})
v_df = v_df.rename(columns={'Order No.': 'Order_Id'})

# 方法B:指定为可空整数类型(Pandas 1.0+支持)
v_df = pd.read_csv('csvfile', delimiter=';', dtype={'Order No.': 'Int64'})
v_df = v_df.rename(columns={'Order No.': 'Order_Id'})

这样读取后的数据不会出现.0,空行对应的值会显示为NaN(方法B)或空字符串(方法A)。

方案2:读取后处理列数据

如果已经读取完数据,可通过以下方式去除.0:

方式1:转为可空整数后转字符串

# 先将float列转为可空整数(自动去掉.0),再转字符串
v_df['Order_Id'] = v_df['Order_Id'].astype('Int64').astype('str')
# 替换空值显示为你需要的内容,比如空字符串
v_df['Order_Id'] = v_df['Order_Id'].replace('NaN', '')

方式2:直接处理浮点数转字符串

# 对非空值取整后转字符串,空值留空
v_df['Order_Id'] = v_df['Order_Id'].apply(lambda x: str(int(x)) if pd.notna(x) else '')

方案3:跳过CSV中的空行

如果空行没有业务意义,可以直接在读取时跳过:

v_df = pd.read_csv('csvfile', delimiter=';', skip_blank_lines=True)
v_df = v_df.rename(columns={'Order No.': 'Order_Id'})
# 若仍有带空格的"伪空行",可读取后删除全空行
v_df = v_df.dropna(how='all')

这样列会保持整数类型,不会出现.0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:55:18