读取CSV跳过7行表头存各列为变量且保留小数精度的解决方法
CSV读取问题解决思路
1. 跳过前7行表头的实现方法
- 用Python内置
csv标准库:
读取文件后迭代调用next()7次,即可跳过前7行内容,示例代码:import csv with open("data.csv", "r", encoding="utf-8") as f: csv_reader = csv.reader(f) # 跳过前7行表头 for _ in range(7): next(csv_reader) # 此处开始处理正式数据行 - 用
pandas库:
直接在read_csv方法中传入skiprows参数指定跳过行数即可,代码更简洁:df = pd.read_csv("data.csv", skiprows=7)
2. 小数精度保留方案
- 存储为string类型是完全可行的方案,不会出现任何精度丢失问题,若后续不需要对该列做数值运算,优先选择该方案。pandas读取时可通过
dtype=str参数将所有列设为字符串类型,也可单独指定对应列的类型为字符串。 - 若后续需要对列做数值计算,可改用
Decimal类型存储,避免默认float类型的二进制精度丢失问题,使用csv库时可手动将读取到的字符串转换为Decimal,pandas可通过dtype参数指定对应列为Decimal类型。
3. 按位置提取列的修复方案
按位置提取列失败通常是表头未正确跳过、行内字段缺失导致索引越界、分隔符识别错误三类原因,可参考以下稳定实现逻辑:
import csv # 定义存储各列的列表 col_a = [] col_b = [] col_c = [] with open("data.csv", "r", encoding="utf-8") as f: csv_reader = csv.reader(f) # 跳过7行表头 for _ in range(7): next(csv_reader) for row in csv_reader: # 先校验行长度,避免索引越界 if len(row) >= 5: # 假设你要取的最大列索引是4,行长度至少要到5 # 按位置取列,索引从0开始计数 col_a.append(row[0]) col_b.append(row[2]) col_c.append(row[4])
如果使用pandas,可通过iloc属性按位置提取列,示例:
import pandas as pd # 跳过前7行,所有列读为字符串保证精度 df = pd.read_csv("data.csv", skiprows=7, dtype=str) # 提取第0、2、4列,冒号表示取所有行 target_df = df.iloc[:, [0,2,4]]
内容的提问来源于stack exchange,提问作者zdougherty
相关产品推荐
相关产品推荐

