如何将API返回的逗号分隔字符串转换为Pandas DataFrame?
问题解析:将API返回的CSV格式响应直接转为Pandas DataFrame
我正尝试解析某API的响应,该API接收批量手机号,返回其状态(如活跃与否)信息。响应内容如下:
# API调用 s.get('https://api/data/stuff') # 响应内容 ',MSISDN,Status,Error Code,Error Text,Original Network,Current Network,Current Country,Roaming Country,Type,Date Checked\n447541255456,447541255456,Undelivered,27,Absent Subscriber,O2 (UK),,,,Mobile,Wed Oct 9 2019 12:26:51 GMT+0000 (UTC)\n447856999555,447856999555,Undelivered,1,Dead,O2 (UK),,,,Mobile,Wed Oct 9 2019 12:26:51 GMT+0000 (UTC)\n447854111222,447854111222,Undelivered,1,Dead,Orange,,,,Mobile,Wed Oct 9 2019 12:26:51 GMT+0000 (UTC)\n'我能识别出MSISDN、Status等为表头,其余为数据行,但无法将其转换为DataFrame这类易读结构。尝试过import io和pd.read_table等方法但未成功,考虑先存为TXT再读取为CSV,想了解是否有更简便的原生Pandas方法?
解决方案:直接用Pandas的
read_csv处理API响应 完全不用绕弯存成TXT文件,Pandas原生就能一步搞定这个问题,核心是处理响应开头的多余逗号,以及正确把字符串包装成可读取的数据源。
关键问题排查
你之前尝试失败,大概率是两个原因:一是响应开头多了个逗号,导致表头错位;二是read_table默认用制表符分隔,而你的数据是逗号分隔的,自然识别不对。
完整代码示例
直接上可运行的代码,一步到位转成DataFrame:
import pandas as pd import io # 假设api_response是你从API获取的响应文本 api_response = ',MSISDN,Status,Error Code,Error Text,Original Network,Current Network,Current Country,Roaming Country,Type,Date Checked\n447541255456,447541255456,Undelivered,27,Absent Subscriber,O2 (UK),,,,Mobile,Wed Oct 9 2019 12:26:51 GMT+0000 (UTC)\n447856999555,447856999555,Undelivered,1,Dead,O2 (UK),,,,Mobile,Wed Oct 9 2019 12:26:51 GMT+0000 (UTC)\n447854111222,447854111222,Undelivered,1,Dead,Orange,,,,Mobile,Wed Oct 9 2019 12:26:51 GMT+0000 (UTC)\n' # 先去掉开头的多余逗号,避免表头错位 cleaned_response = api_response.lstrip(',') # 用io.StringIO把字符串包装成Pandas能读取的"文件对象",再用read_csv解析 df = pd.read_csv(io.StringIO(cleaned_response)) # 验证结果 print(df.head())
额外优化:直接从API响应对象读取
如果是用requests库调用API,还能跳过手动存储响应文本的步骤,直接从响应对象读取:
import pandas as pd import io import requests # 调用API获取响应 response = requests.get('https://api/data/stuff') # 清理开头逗号并解析 cleaned_response = response.text.lstrip(',') df = pd.read_csv(io.StringIO(cleaned_response))
这样就完全不需要中间文件,直接把API响应转换成结构化的DataFrame了。
内容的提问来源于stack exchange,提问作者SCool
相关产品推荐
相关产品推荐

