首页 > 编程问答 >Pandas 读取具有多个表的 csv

Pandas 读取具有多个表的 csv

时间:2024-07-30 08:48:32浏览次数:7  
标签:python pandas dataframe csv parsing

我有一个下载 csv 文件的 URL,要打开它,我使用以下代码:

 df = pd.read_csv(url)

我使用的大多数 URL 只包含一个表,并且它们可以正常打开,但有些具有以下格式,会导致错误:| ||csv 文件被一组两个空行分成两个表。

enter image description here

代码当前返回以下错误:

我试图读取两个表,然后将它们组合成一个表,例如下列的:

ParserError: Error tokenizing data. C error: Expected 4 fields in line 9, saw 5

I am trying to read in both tables and then combine them into one table such as the following:

enter image description here


你可以使用 pandas 库中的 read_csv 函数和一些数据处理技巧来读取和合并具有多个表的 csv 文件。以下是实现此目的的步骤:

1. 读取 csv 文件中的所有表:

import pandas as pd
import io
import requests

# 从 URL 读取 csv 文件内容
url = 'your_csv_url_here'  # 用你的实际 URL 替换
response = requests.get(url)
response.raise_for_status()  # 检查请求是否成功

# 使用 StringIO 将内容作为文件对象读取
content = io.StringIO(response.text)

# 使用 read_csv 读取所有表,并使用空行作为分隔符
all_dfs = pd.read_csv(content, header=None, sep='\s+', engine='python', skip_blank_lines=False)

这将创建一个包含所有表的 DataFrame 列表,每个表都作为一个单独的 DataFrame。

2. 识别表边界并提取表:

# 找到空行的索引
blank_rows = all_dfs[all_dfs.isnull().all(axis=1)].index

# 创建一个表列表
tables = []
start = 0
for i in range(len(blank_rows)):
    end = blank_rows[i]
    tables.append(all_dfs.iloc[start:end])
    start = end + 1
tables.append(all_dfs.iloc[start:])  # 添加最后一个表

这会将数据帧列表拆分为包含单个表的列表。

3. 合并表:

# 假设第一个表包含列名,并将所有其他表附加到第一个表
final_df = tables[0].copy()
final_df.columns = final_df.iloc[0]
final_df = final_df[1:]

for df in tables[1:]:
    df.columns = final_df.columns
    final_df = pd.concat([final_df, df], ignore_index=True)

这会将所有表合并到一个 DataFrame 中,并将第一个表的标题用作最终 DataFrame 的列名。

完整代码:

import pandas as pd
import io
import requests

url = 'your_csv_url_here'
response = requests.get(url)
response.raise_for_status()

content = io.StringIO(response.text)

all_dfs = pd.read_csv(content, header=None, sep='\s+', engine='python', skip_blank_lines=False)

blank_rows = all_dfs[all_dfs.isnull().all(axis=1)].index
tables = []
start = 0
for i in range(len(blank_rows)):
    end = blank_rows[i]
    tables.append(all_dfs.iloc[start:end])
    start = end + 1
tables.append(all_dfs.iloc[start:])

final_df = tables[0].copy()
final_df.columns = final_df.iloc[0]
final_df = final_df[1:]

for df in tables[1:]:
    df.columns = final_df.columns
    final_df = pd.concat([final_df, df], ignore_index=True)

print(final_df)

这会创建一个包含所有数据且格式正确的单个 DataFrame。请记住用你的实际 csv 文件 URL 替换 'your_csv_url_here'

标签:python,pandas,dataframe,csv,parsing
From: 78809285

相关文章

  • 即使使用 docker run -dit 命令,python-Docker 容器也会在运行两秒后退出
    我想从此处使用Dockerfile测试自定义kubernetes调度程序:FROMpython:3.7RUNpipinstallkubernetesCOPYscheduler.py/scheduler.pyCMDpython/scheduler.py一旦创建了映像和容器:dockerbuild-tapp.dockercontainerrun-d-it--namemy-sched......
  • Pandas GroupBy - 仅显示具有多个唯一特征值的组
    我有一个DataFramedf_things看起来像这样,我想在训练之前预测分类的质量ABCCLASS-----------------------al1bal1cal1Shipal1bal1cal1Shipal1bal2cal2Shipal2bal2cal2Cowal3bal3cal3Caral1bal2cal3C......
  • Python多重处理,如何避免创建具有百万个对象的元组
    python多处理新手。我有一项任务,涉及访问网络服务数百万次并将响应保存在文件中(每个请求都有单独的文件)。我已经得到了高级工作代码,但对一些事情没有感到困惑。以下两种语法有什么区别?pool=Pool(processes=4)pool.starmap(task,listOfInputParametersTu......
  • Python OpenCV - 显示坏像素检查测试
    我想找到显示器中存在的每个坏像素。坏像素可能是颜色不正确的像素,或者像素只是黑色。显示屏的尺寸为160x320像素。所以如果显示效果好的话,必须有160*320=51200像素。如果显示器没有51200像素,那就是坏的。另外,我想知道每个坏像素的位置。一旦拍摄的图像太大,我将共享一个......
  • 在python日志输出的每一行前面添加变量缩进
    我正在将日志记录构建到一个Python应用程序中,我希望它是人类可读的。目前,调试日志记录了调用的每个函数以及参数和返回值。这意味着,实际上,嵌套函数调用的调试日志可能如下所示:2024-07-2916:52:26,641:DEBUG:MainController.initialize_componentscalledwithargs<control......
  • 使用 DQN 实现 pong,使用 python 中的特征向量而不是像素。我的 DQNA 实现代码正确吗,因
    我正在致力于使用OpenAI的Gym为Pong游戏实现强化学习(RL)环境。目标是训练人工智能代理通过控制球拍来打乒乓球。代理收到太多负面奖励,即使它看起来移动正确。具体来说,奖励函数会惩罚远离球的智能体,但这种情况发生得太频繁,即使球朝球拍移动时似乎也会发生。观察......
  • Python CDLL 无法加载两次
    我正在尝试用python创建一个密码管理器,但遇到了一个问题,一旦加载了一种类型的dll,我就无法加载不同的dll,在这个示例中,我加载了一个dll,并尝试解密加密的密码数据,它工作正常,直到我加载另一个不同的nss3.dll文件,此时它给我一个错误:“过程入口点HeapAlloc无法位于动态链......
  • 你能将 HTTPS 功能添加到 python Flask Web 服务器吗?
    我正在尝试构建一个Web界面来模拟网络设备上的静态接口,该网络设备使用摘要式身份验证和HTTPS。我想出了如何将摘要式身份验证集成到Web服务器中,但我似乎无法找到如何使用FLASK获取https,如果您可以向我展示如何实现,请评论我需要使用下面的代码做什么来实现这一点。from......
  • Python:比较 csv 文件并打印相似之处
    我需要比较两个csv文件并打印出它们的相似之处。第一个文件有名称和浓度,第二个文件就像只有名称的“最佳”列表,我需要绘制相似性图表。例如,这就是我的列表的样子:file1-old_file.csvname_id,conc_test1,conc_test2name1,####,####name2,###......
  • Python 类交叉引用
    我用Python创建了一个数独游戏。我有一个:单元格类-“保存”数字可能性单元格组-保存单元格类实例我使用这些组在数独中运行行、列和正方形功能。每个单元格包含所有组,他属于classCell:def__init__(groups):self.groups=groupscla......