Python 如何将url读入数据框并连接不需要的行?

Python 如何将url读入数据框并连接不需要的行?,python,pandas,dataframe,csv,Python,Pandas,Dataframe,Csv,我有以下代码来从网站导入一些数据,我想将我的数据变量转换为数据帧 我试过使用pd.DataFrame和pd.read_csv(io.StringIO(data),sep=“;”)但总是显示错误 import requests import io # load file data = requests.get('https://www.omie.es/sites/default/files/dados/AGNO_2020/MES_08/TXT/INT_PDBC_MARCA_TECNOL_1_01

我有以下代码来从网站导入一些数据,我想将我的
数据
变量转换为数据帧

我试过使用
pd.DataFrame
pd.read_csv(io.StringIO(data),sep=“;”)
但总是显示错误

import requests
import io

# load file
data = requests.get('https://www.omie.es/sites/default/files/dados/AGNO_2020/MES_08/TXT/INT_PDBC_MARCA_TECNOL_1_01_08_2020_31_08_2020.TXT').content

# decode data
data = data.decode('latin-1')

# skip first 2 rows
data = data.split('\r\n')[2::]
del data[1]

# trying to fix csv structure
lines = []
lines_2 = []
for line in data:
  line = ';'.join(line.split(';'))
  if len(line) > 0 and line[0].isdigit():
    lines.append(line)
    lines_2.append(line)
  else:
    if len(lines) > 0:
      lines_2.append(lines_2[-1] + line)
      lines_2.remove(lines_2[-2])
    else:
      lines.append(line)


data = '\r\n'.join(lines_2)
print(data) 
预期输出应如下所示:

      date      1   2
0  29/08/2020  HI  RE ....
1  30/08/2020  HI  RE ....
2  31/08/2020  HI  RE ...

有几行需要添加到previos one中(主要行应该是以日期开头的行)

您可以使用
直接从URL读取文本/csv数据

将熊猫作为pd导入
乌里https://www.omie.es/sites/default/files/dados/AGNO_2020/MES_08/TXT/INT_PDBC_MARCA_TECNOL_1_01_08_2020_31_08_2020.TXT'
df=pd.read_csv(URI,sep=';',encoding='latin1')
打印(df)

pandas
将为您进行下载。因此无需
请求
io.StringIO
您可以使用
pandas
直接从URL读取文本/csv数据

将熊猫作为pd导入
乌里https://www.omie.es/sites/default/files/dados/AGNO_2020/MES_08/TXT/INT_PDBC_MARCA_TECNOL_1_01_08_2020_31_08_2020.TXT'
df=pd.read_csv(URI,sep=';',encoding='latin1')
打印(df)

pandas
将为您进行下载。因此不需要
请求
io.StringIO

Prayson的答案是正确的,但也应该使用
skiprows
参数(否则元数据会被解释为列名)

将熊猫作为pd导入
df=pd.read\u csv(
"https://www.omie.es/sites/default/files/dados/AGNO_2020/MES_08/TXT/INT_PDBC_MARCA_TECNOL_1_01_08_2020_31_08_2020.TXT",
sep=“;”,
skiprows=2,
编码='latin-1',
)
打印(df)

Prayson的答案是正确的,但是也应该使用
skiprows
参数(否则元数据会被解释为列名)

将熊猫作为pd导入
df=pd.read\u csv(
"https://www.omie.es/sites/default/files/dados/AGNO_2020/MES_08/TXT/INT_PDBC_MARCA_TECNOL_1_01_08_2020_31_08_2020.TXT",
sep=“;”,
skiprows=2,
编码='latin-1',
)
打印(df)

尝试运行它并告诉我输出。。。无法按预期工作,txt中有一些行需要修复…输出的是实际的txt文件。您将需要更多的数据清理以使其成为干净的格式。我也应该包括这一部分吗?谢谢Prayson,这可能不是正确的方法,但是如果我已经清理了数据,为什么我需要从read_csv开始再次清理,难道没有其他方法吗?如果您知道如何用自己的方式清理所有数据,欢迎您这样做!正确的方式是您熟悉的方式:)因为这是您的代码。您能解释一下逻辑吗?我将尝试使用
Pandas
进行清理。当我尝试使用
df=pd.read_csv(io.StringIO(data),sep=“;”)
Pandas向我显示此错误:
Pandas.errors.parserror:error标记化数据。C错误:第31行预计有25个字段,看到48个字段,我估计这是为少数几个字段准备的;;;;;;;在最后一排。。。如果你运行我的代码,你可以看到最后的;;;我想这就是问题所在试着运行它并告诉我输出。。。无法按预期工作,txt中有一些行需要修复…输出的是实际的txt文件。您将需要更多的数据清理以使其成为干净的格式。我也应该包括这一部分吗?谢谢Prayson,这可能不是正确的方法,但是如果我已经清理了数据,为什么我需要从read_csv开始再次清理,难道没有其他方法吗?如果您知道如何用自己的方式清理所有数据,欢迎您这样做!正确的方式是您熟悉的方式:)因为这是您的代码。您能解释一下逻辑吗?我将尝试使用
Pandas
进行清理。当我尝试使用
df=pd.read_csv(io.StringIO(data),sep=“;”)
Pandas向我显示此错误:
Pandas.errors.parserror:error标记化数据。C错误:第31行预计有25个字段,看到48个字段,我估计这是为少数几个字段准备的;;;;;;;在最后一排。。。如果你运行我的代码,你可以看到最后的;;;我认为这就是问题所在