使用pd.read_csv时如何去除多余.0并转为int类型?
问题1:读取含
.0的CSV数据并转为int类型 针对示例CSV数据:
1000.0, 2000.0, 3000.0
直接用pd.read_csv(..., dtype=int)会报错,因为数据是带小数位的字符串格式。推荐两种优雅的处理方式:
方式1:读取为float后直接转int
如果数据确定都是整数的浮点表示(无非.0的小数),可以先以float读取,再转为int:
import pandas as pd df = pd.read_csv("your_file.csv", dtype=float).astype(int)
这种方式简洁,pandas会自动去除.0,直接得到int类型数值。
方式2:使用converters参数自定义解析
如果需要在读取阶段完成处理,可通过converters指定列的解析逻辑:
df = pd.read_csv( "your_file.csv", converters={col: lambda x: int(float(x)) for col in ["col1", "col2", "col3"]} )
若不确定列名,可按索引处理:
df = pd.read_csv( "your_file.csv", header=None, converters={i: lambda x: int(float(x)) for i in range(3)} )
问题2:解析带千分位的数值字符串
1,000时报错 执行pd.read_csv(~, dtype='int', thousands=',')出现unable to parse string "1,000"错误,原因是指定dtype='int'时,pandas会跳过thousands参数的预处理,直接尝试将未处理逗号的字符串转为int。
解决方法:
方式1:不指定dtype,让pandas自动识别
去掉dtype='int',仅保留thousands=',',pandas会自动解析千分位并识别数值类型,之后再转为int即可:
df = pd.read_csv("your_file.csv", thousands=',') df = df.astype(int)
方式2:使用converters自定义处理
编写解析函数,先去除千分位逗号再转int:
def parse_thousand(x): return int(x.replace(',', '')) df = pd.read_csv( "your_file.csv", converters={"target_col": parse_thousand} )
方式3:使用Int64可空整数类型
若数据存在缺失值,推荐用可空整数类型配合thousands=',',既支持千分位解析,又能保留int类型:
df = pd.read_csv("your_file.csv", dtype='Int64', thousands=',')
内容的提问来源于stack exchange,提问作者younghyun
相关产品推荐
相关产品推荐

