Python Pandas读取API数据遇回车换行导致DataFrame错行问题求助
解决方案
方案1:读入CSV前预处理原始文本(更推荐)
直接在文本层面修正换行问题,避免读入时pandas自动处理异常行导致的数据丢失或类型错误:
import io import pandas as pd import requests # 原请求逻辑,注意修正拼写错误:requesgs → requests results = requests.get(url, auth=auth, headers=headers, data=data) raw_text = results.content.decode("utf-8") # 拆分所有行后逐行校验修正 lines = raw_text.splitlines() fixed_lines = [] for line in lines: # 判断规则:正常行按空白拆分后至少有2个字段(对应col_1、col_2),不符合且已有有效行的判定为错行 if len(line.strip().split(maxsplit=1)) < 2 and fixed_lines: # 错行内容拼接到上一行末尾 fixed_lines[-1] = f"{fixed_lines[-1]} {line.strip()}" else: fixed_lines.append(line) # 修正后的文本转DataFrame,多空格分隔用sep="\s+"匹配 fixed_text = "\n".join(fixed_lines) rawData = pd.read_csv(io.StringIO(fixed_text), sep="\s+")
方案2:已读入DataFrame的情况
错行的特征为col_1为异常文本、col_2为空,可通过辅助列匹配修正:
import pandas as pd import numpy as np # 标记错行:col_1正常为整数,转数字失败的判定为错行 rawData["is_bad_row"] = pd.to_numeric(rawData["col_1"], errors="coerce").isna() # 提取错行的内容 rawData["bad_content"] = np.where(rawData["is_bad_row"], rawData["col_1"], "") # 错行内容上移一位,匹配到对应前一行 rawData["bad_content"] = rawData["bad_content"].shift(-1) # 拼接col_2内容 rawData["col_2"] = rawData.apply( lambda x: f"{x['col_2']} + {x['bad_content']}" if x["bad_content"] else x["col_2"], axis=1 ) # 过滤错行、删除辅助列 rawData = rawData[~rawData["is_bad_row"]].drop(columns=["is_bad_row", "bad_content"]).reset_index(drop=True)
注意事项
- 可根据实际业务的行格式调整错行判断规则,比如正常行
col_1符合特定正则格式的,用正则匹配判断即可 - 如果分隔符不是多空格,是制表符、逗号等,把判断逻辑和
read_csv的sep参数改为对应分隔符即可
内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles
相关产品推荐
相关产品推荐

