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.StringIOPrayson的答案是正确的,但也应该使用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个字段,我估计这是为少数几个字段准备的;;;;;;;在最后一排。。。如果你运行我的代码,你可以看到最后的;;;我认为这就是问题所在