Python 将多个数据帧转换为单个数据帧
我们对此做了很多研究,但仍然找到了答案 我有一个通过Python 将多个数据帧转换为单个数据帧,python,pandas,web-scraping,concatenation,Python,Pandas,Web Scraping,Concatenation,我们对此做了很多研究,但仍然找到了答案 我有一个通过read\u html函数拉入Pandas的刮表列表。这将返回dataframe对象的列表。我可以将concat转换为单个数据帧,但问题在于每个表pre-concat的格式 我需要转置,然后是concat,但不确定如何转置当第一步是数据帧的read\u html列表时,该功能无法在这种格式下工作。作为一个表,很容易设置一个新的索引并转换成精确的格式,而在批量运行时,这种方法是行不通的。列本质上是标题 结构如下: -0 1 0 Id 470 1
read\u html
函数拉入Pandas的刮表列表。这将返回dataframe对象的列表。我可以将concat转换为单个数据帧,但问题在于每个表pre-concat的格式
我需要转置,然后是concat,但不确定如何转置当第一步是数据帧的read\u html
列表时,该功能无法在这种格式下工作。作为一个表,很容易设置一个新的索引并转换成精确的格式,而在批量运行时,这种方法是行不通的。列本质上是标题
结构如下:
-0 1
0 Id 470
1 Nome pozzo CLARA NORD 004 DIR A
2矿物气
3普罗杜齐奥内的斯塔托
4乌比卡锡安母马酒店
克拉拉北坎波5号
6双coltivazione B.C 13.AS特许权
克拉拉北滨海广场7号
拉科尔塔中央酒店
9埃尼歌剧院
2011年第10号绩效公告
11 Profondit\\xe0 1.872 m
所需输出部分示例:
Id Nome火山灰矿物Stato Ubicazione
56土地生产中的ALLI 004或OLIO
单表代码段:
#Table declared
table = soup.find_all('table')
table1 = str(table)
df = pd.pandas.read_html(table1)[0] #limited for example
df2 = pd.concat(df, ignore_index=True) #concat full list of df's
df.columns = ['header', 'value'] #column header set for transpose
df = df.set_index('header').T #index set and transposed
希望您能了解水平输出的概念。问题是,当我转置大容量时,标签的多个列/行作为标题出现在每个数据帧上。有几百个数据帧需要转置并生成一个数据帧
批量代码:
#Table declared
table = soup.find_all('table')
table1 = str(table)
df = pd.pandas.read_html(table1)
df2 = pd.concat(df, ignore_index=True) #concat full list of df's
df2.columns = ['header', 'value'] #column header set for transpose
-标题值
0 Id 56
1 Nome pozzo ALLI 004或
2矿物油
3普罗杜齐奥内的斯塔托
4 Ubicazione TERRA
5坎波蒙特阿尔皮-蒙特埃诺
6农业许可证
7 raccolta e trattamento CENTRO OLIO VAL D\\\\'AGRI酒店
8埃尼运营商
9 2004年绩效公告
10深\\xe0 3.830米
11ID588
12 Nome pozzo GELA 109 DIR
13矿物油
14 Stato PRODUTTIVO非腐蚀性
15 Ubicazione TERRA
16 Campo GELA TERRA
17双氯噻嗪酮凝胶剂特许
18拉科尔塔中央酒店
19伊德罗卡布里地中海酒店
20 1997年绩效公告
21 Profondit\\xe0 3.493 m
22身份证705
23 Nome pozzo LUNA 010 DIR A
24矿物气
25 Stato PRODUTTIVO非腐蚀性
26乌比卡锡安母马
27月坎波酒店
28双氯噻嗪酮D.C 1.AG特许权
29月A日码头广场
... ... ...代码>
批量可以是这样的:
Id Nome火山灰矿物Stato Ubicazione
56土地生产中的ALLI 004或OLIO
Id Nome火山灰矿物Stato Ubicazione
54地面生产中的测试或OLIO
Id Nome火山灰矿物Stato Ubicazione
53 TERRA产品中的test1或OLIO
目的是从上述批量样式创建此样式
Id Nome火山灰矿物Stato Ubicazione
56土地生产中的ALLI 004或OLIO
54生产地的测试或OLIO
53 TERRA产品中的test1或OLIO
我假设发生这种情况是因为两列以行作为所需的标题开始,因此每次都会重复这些列,因为每个数据帧都有一列“标题”
我相信concat会工作,如果在正确的转置格式之前。请注意,有些表格的列数不同,有些表格多达12列,有些表格只有9列。因此,对于我的12个标题,每个数据帧值都将填充,除非该表没有该列,否则该单元格将为null/naan
以前的一个选项是将每个表读入df并附加到主表中,但这相当缓慢且无法使用
有什么建议吗?函数返回数据帧列表,这样您就可以循环列表理解和转置。最后在concat
add之后删除列名:
dfs = [df.set_index(0).T for df in pd.pandas.read_html(table1)]
df = pd.concat(dfs, ignore_index=True).rename_axis(None, 1)
print (df)
Id Nome pozzo Minerale Stato Ubicazione \
0 56 ALLI 004 OR OLIO IN PRODUZIONE TERRA
1 588 GELA 109 DIR OLIO PRODUTTIVO NON EROGANTE TERRA
Campo Concessione di coltivazione \
0 MONTE ALPI-MONTE ENOC VAL D\\\'AGRI
1 GELA TERRA GELA
Centrale di raccolta e trattamento Operatore \
0 CENTRO OLIO VAL D\\\'AGRI ENI
1 NUOVO CENTRO OLIO GELA ENI MEDITERRANEA IDROCARBURI
Anno di perforazione Profondit\\xe0
0 2004 3.830 m
1 1997 3.493 m
或者可能df.set\u in