如何使用Python pandas仅读取CSV文件中的指定行与单元格
非规整多区块CSV文件读取实现方案
你的CSV不属于标准单表结构,混杂了个人信息、无关文本、多段测量数据,不能直接用pd.read_csv全量读取,需要先拆分不同区块再分别处理,具体实现步骤如下:
步骤1:先按行读取全量内容过滤无效行
首先读取文件所有行,去掉空行和首尾空白字符,方便后续拆分区块:
import pandas as pd # 替换为你的CSV文件路径 file_path = "test.csv" with open(file_path, "r", encoding="utf-8") as f: # 过滤空行、去除每行首尾空白 valid_lines = [line.strip() for line in f if line.strip()]
步骤2:提取个人信息转指定格式字典
前两行是个人信息区块,单独读取后转换为你需要的字典结构:
# 读取前两行个人信息,多空格/制表符作为分隔符 person_df = pd.read_csv( pd.io.common.StringIO("\n".join(valid_lines[:2])), sep="\s+" # 如果是固定制表符分隔,替换为sep="\t"更稳妥 ) # 转换为指定格式的字典 person_info = { "last_name": person_df.iloc[0]["Last Name"], "first_name": person_df.iloc[0]["First Name"], "start_date": person_df.iloc[0]["Start Date"], "end_date": person_df.iloc[0]["End Date"] }
此时person_info输出格式为:{'last_name': 'Example', 'first_name': 'Eva', 'start_date': '1.1.2021', 'end_date': '15.6.2021'},符合你的需求。
步骤3:读取多段测量数据存入变量
找到所有------- Header-------分隔符的位置,分别读取每个分隔符下的测量数据表:
# 定位所有Header分隔行的索引 header_positions = [i for i, line in enumerate(valid_lines) if line.startswith("------- Header-------")] # 存储所有测量数据表的列表,你也可以单独赋值给指定变量 reading_data_list = [] for pos in header_positions: # 截取当前Header下的所有数据行,到下一个Header前结束 end_pos = header_positions[header_positions.index(pos)+1] if header_positions.index(pos) < len(header_positions)-1 else len(valid_lines) data_lines = valid_lines[pos+1: end_pos] # 读取数据表,注意你的读数用逗号做小数点,指定decimal参数自动转换为数值类型 df = pd.read_csv( pd.io.common.StringIO("\n".join(data_lines)), sep="\s+", decimal="," ) reading_data_list.append(df) # 示例:提取指定值存入变量 # 取第一段测量数据的第一个读数 first_reading = reading_data_list[0].iloc[0]["Reading"] # 取第二段测量数据的所有时间 second_time_list = reading_data_list[1]["Time"].tolist()
注意事项
- 你之前使用的
pd.read_csv(file, sep='delimiter')是错误用法,delimiter是sep参数的别名,不能直接传入字符串delimiter作为分隔符 - 如果文件分隔符是固定制表符,将
sep="\s+"替换为sep="\t"可以避免特殊场景下的拆分错误
内容的提问来源于stack exchange,提问作者lr_optim
相关产品推荐
相关产品推荐

