You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决DataFrame导出CSV时的列错位与仅导出单行问题

问题解决

问题根源

  1. CSV仅导出1行:循环内每次创建新DataFrame并执行to_csv时直接覆盖文件,未做追加处理,最终只保留最后一次循环的数据。
  2. 列错位:Field_02内容包含逗号,CSV默认以逗号作为列分隔符,导致该字段被拆分为多列,后续列被挤至更靠后的位置。

修改后的代码

import pandas as pd

baseurl = 'https://hippeas.com'

# 初始化列表存储所有数据条目
data_list = []

with open("/run/user/759001103/gvfs/smb-share:server=192.168.0.150,share=indexserver/code.txt", "r") as data:
    info = data.readlines()

# 临时存储单条数据的四个字段
temp_item = {}
for items in info:
    if items.startswith("    <img src="):
        reduce_imgurl = items.split('//')[-1].strip()  # 清理换行符
        temp_item['Field_01'] = reduce_imgurl
    if items.startswith("    <h3 class="):
        reduce_name = items[39:-6].strip()
        temp_item['Field_02'] = reduce_name
    if items.startswith("  <a href="):
        reduce_link = items[11:-32].strip()
        temp_item['Field_03'] = baseurl + reduce_link
    if items.startswith("      <span class="):
        reduce_price = items[55:-8].strip()
        temp_item['Field_04'] = reduce_price
        # 单条数据收集完成,加入总列表
        data_list.append(temp_item.copy())
        # 重置临时字典,准备收集下一条数据
        temp_item = {}

# 统一生成DataFrame
df = pd.DataFrame(data_list, columns=['Field_01','Field_02','Field_03','Field_04'])
print(df)

# 导出CSV,用引号包裹非数值字段,避免逗号拆分列
df.to_csv('/run/user/759001103/gvfs/smb-share:server=192.168.0.150,share=indexserver/Testcode.csv', 
          index=False, 
          quoting=pd.io.common.QUOTE_NONNUMERIC)

关键修改说明

  • 批量收集数据:用列表统一存储所有条目,避免循环内反复创建DataFrame并覆盖文件。
  • 清理冗余字符:通过strip()去除字段中的换行符,避免CSV出现多余空行。
  • CSV导出优化:添加quoting=pd.io.common.QUOTE_NONNUMERIC参数,让含逗号等特殊字符的字段被双引号包裹,解决列错位问题。

内容的提问来源于stack exchange,提问作者sammyb62

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:20:40