如何匹配CSV文件中的重复日期并获取所有对应行索引
解决CSV重复日期的全匹配行索引获取问题
看来你卡在了CSV重复日期的匹配上——只拿到第一个匹配行的索引,却漏掉了同日期的其他行对吧?问题大概率出在你之前的for循环里:找到第一个匹配项后就直接跳出/返回了,没继续遍历剩下的行收集所有结果。下面给你两种实用的解决方法:
方法一:用Python内置csv模块(无需额外安装)
这种方法适合轻量处理,不用装第三方库:
import csv def get_all_matching_rows(target_date, csv_path): matching_indices = [] matching_pos_neg = [] # 打开CSV文件,注意分隔符和编码要和你的文件匹配 with open(csv_path, 'r', encoding='utf-8') as file: # 用DictReader把行转成字典,方便按列名取值 reader = csv.DictReader(file) # 从1开始计数行号(因为第一行是表头) for row_num, row in enumerate(reader, start=1): # 确保日期格式一致,比如都转成字符串比较 if row['Date'] == str(target_date): matching_indices.append(row_num) matching_pos_neg.append({ 'Positive': row['Positive'], 'Negative': row['Negative'] }) return matching_indices, matching_pos_neg # 调用示例 target = 20180402 indices, data = get_all_matching_rows(target, 'your_data.csv') print(f"匹配日期{target}的行索引:{indices}") print(f"对应的正负值数据:{data}")
这段代码会从头到尾遍历整个CSV,把所有和目标日期匹配的行索引、对应数据都收集到列表里,不会提前终止循环。
方法二:用Pandas处理(高效简洁,适合大文件)
如果你的CSV文件比较大,用Pandas会更高效,代码也更清爽:
import pandas as pd # 读取CSV文件 df = pd.read_csv('your_data.csv') # 统一日期格式(避免类型不匹配找不到结果) df['Date'] = df['Date'].astype(str) # 目标日期也要转成对应格式 target_date = str(20180402) # 筛选所有匹配目标日期的行 matching_rows = df[df['Date'] == target_date] # 获取行索引(Pandas默认从0开始,要是需要从1开始的行号,就用 (matching_rows.index + 1).tolist()) matching_indices = matching_rows.index.tolist() # 获取对应的Positive和Negative数据 matching_data = matching_rows[['Positive', 'Negative']].to_dict('records') print(f"匹配日期{target_date}的行索引:{matching_indices}") print(f"对应的正负值数据:{matching_data}")
Pandas的布尔索引会直接帮你筛选出所有符合条件的行,不用自己写循环,处理表格数据特别顺手。
重要提醒
- 日期格式要统一:比如CSV里的日期是字符串,你输入的目标日期也要转成字符串;如果是数字类型,两边都保持数字,不然会因为类型不匹配找不到匹配项。
- 别提前终止循环:之前的问题就是找到第一个匹配就return了,一定要把所有匹配项都收集到列表里再返回结果。
内容的提问来源于stack exchange,提问作者Apple
相关产品推荐
相关产品推荐

