如何用条件语句读取CSV值?解决Rel volume类型冲突与数据筛选问题
看起来你遇到的核心问题是CSV读取时Rel volume字段默认是字符串类型,没法直接和数值2.5做比较对吧?别担心,咱们只需要在读取数据时把这个字段转换成浮点型,同时做好异常处理避免程序崩溃,就能顺利完成筛选啦。
方法一:使用Python内置csv模块
这个方法适合不想额外安装库的场景,步骤清晰易理解:
- 用
csv.DictReader读取CSV,它会把每行数据转成字典,方便通过列名直接取值 - 遍历每一行时,尝试将
Rel volume转换为float类型 - 过滤出满足
Rel volume >= 2.5的行,存入新列表 - 实时打印符合条件的股票代码和对应数值
代码示例:
import csv # 初始化列表存储符合条件的股票数据 filtered_stocks = [] # 打开目标CSV文件(记得替换成你的文件实际路径) with open('your_stocks.csv', 'r', newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: try: # 将字符串类型的'Rel volume'转为浮点型 rel_volume = float(row['Rel volume']) # 判断是否满足阈值条件 if rel_volume >= 2.5: # 把当前行的关键信息存入列表(也可以存整行数据,按需调整) filtered_stocks.append({ 'ticker': row['ticker'], 'Rel volume': rel_volume }) # 打印匹配结果 print(f"Ticker: {row['ticker']}, Rel Volume: {rel_volume}") except ValueError: # 处理无法转换的异常情况(比如单元格是空值或非数字内容) print(f"警告:第{reader.line_num}行的'Rel volume'不是有效数字,已跳过该行") # 查看最终筛选后的列表 print("\n筛选完成,符合条件的股票数据列表:") print(filtered_stocks)
方法二:使用pandas库(更简洁高效)
如果你的数据量较大,用pandas会更省心,它能自动处理大部分类型转换逻辑,代码也更简洁:
首先如果还没安装pandas,先执行安装命令:
pip install pandas
然后是处理代码:
import pandas as pd # 读取CSV文件(替换成你的文件路径) df = pd.read_csv('your_stocks.csv') # 将'Rel volume'转为数值类型,无效值会被转为NaN df['Rel volume'] = pd.to_numeric(df['Rel volume'], errors='coerce') # 筛选出满足条件且排除无效值的行 filtered_df = df[(df['Rel volume'] >= 2.5) & (~df['Rel volume'].isna())] # 打印符合条件的股票代码和对应数值 print("符合条件的股票数据:") print(filtered_df[['ticker', 'Rel volume']]) # 把筛选结果转为字典列表格式(和方法一的输出格式一致) filtered_stocks = filtered_df.to_dict('records') print("\n转为列表格式的筛选结果:") print(filtered_stocks)
关键注意事项:
- 异常处理:CSV文件里可能存在空值、非数字内容,两种方法都做了对应处理——方法一用
try-except捕获转换异常,方法二用pd.to_numeric的errors='coerce'把无效值转成NaN再排除,避免程序崩溃。 - 路径替换:记得把代码里的
your_stocks.csv替换成你实际的CSV文件路径。
这样就能解决类型冲突问题,同时把符合条件的数据成功存入新列表啦!
内容的提问来源于stack exchange,提问作者Taylor Rhodes
相关产品推荐
相关产品推荐

