Python爬虫输出优化:去除CSV及控制台额外信息保留纯数值
解决pandas爬虫输出含dtype、Name等额外信息的问题
你遇到的问题本质是提取数据时得到的是pandas Series对象,而非纯数值——这类对象自带元数据(如Name、dtype),输出时会被一并显示。要只保留股票代码和目标数值,需要从Series中提取纯值并构建干净的数据集。
核心修改步骤
- 提取纯数值:从匹配到的Series中直接取出单个值,而非保留整个Series对象
- 构建干净数据集:用纯数值组成字典/列表,再生成标准DataFrame
- 控制输出格式:避免打印Series元信息,直接输出纯数据表格
修改后的示例代码
假设你的原始爬虫逻辑是从HTML表格中提取数据,修改后的代码如下:
import pandas as pd import requests # 读取股票列表文件 with open('StockList.txt', 'r', encoding='utf-8') as f: stock_codes = [line.strip() for line in f if line.strip()] results = [] for code in stock_codes: # 替换为你的目标爬虫URL target_url = f"https://example.com/stock/{code}" resp = requests.get(target_url) # 假设目标数据在页面的第一个HTML表格中 table_df = pd.read_html(resp.text)[0] # 提取纯数值:用.iloc[0]获取第一个匹配的数值(避免返回Series) try: eps_rank = table_df.loc[table_df['指标列名'] == 'epsRank', '数值列名'].iloc[0] industry_rank = table_df.loc[table_df['指标列名'] == 'industryGroupRank', '数值列名'].iloc[0] no_of_funds = table_df.loc[table_df['指标列名'] == 'noOfFunds', '数值列名'].iloc[0] except IndexError: # 处理无匹配数据的情况,可根据需求设置默认值 eps_rank, industry_rank, no_of_funds = None, None, None # 将纯数值存入结果列表 results.append({ '股票代码': code, 'epsRank': eps_rank, 'industryGroupRank': industry_rank, 'noOfFunds': no_of_funds }) # 生成干净的DataFrame final_df = pd.DataFrame(results) # 控制台输出(无索引、无额外元信息) print(final_df.to_string(index=False)) # 保存到CSV(无索引,避免生成额外列) final_df.to_csv('stock_data.csv', index=False, encoding='utf-8-sig')
关键说明
- 提取纯值的方法:
.iloc[0]直接获取Series的第一个元素(纯数值),也可以用.values[0],两者效果一致 - 异常处理:添加
try-except避免因某只股票无匹配数据导致程序中断,可根据需求设置默认值(如0或NaN) - 输出控制:
to_string(index=False)确保控制台输出无索引列;to_csv(index=False)避免CSV中生成额外的索引列
常见错误排查
如果仍有额外信息出现:
- 检查字段类型:用
type(eps_rank)确认,若输出是pandas.core.series.Series,则说明提取方式有误 - 转换数值类型:若提取的是字符串,可手动转为数值类型,如
int(eps_rank)或float(eps_rank)
内容的提问来源于stack exchange,提问作者erukumk
相关产品推荐
相关产品推荐

