如何解决DataFrame导出CSV时的列错位与仅导出单行问题
问题解决
问题根源
- CSV仅导出1行:循环内每次创建新DataFrame并执行
to_csv时直接覆盖文件,未做追加处理,最终只保留最后一次循环的数据。 - 列错位:
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
相关产品推荐
相关产品推荐

