我有一个名单的一部分如下:
energy = [... , 'Wind 1,00 Water 7,36 Renewable Cogeneration 9,71 Other Renewables 9,65 Solid Waste 2,80',
'Fossil Cogeneration 2,17 ',
'Natural Gas 56,35 Coal 9,73 Nuclear 0,64 ', ...]
列表的其余部分与此部分无关,我需要将其转换为 Dataframe ,如下所示:
key value
0 Wind 1.00
1 Water 7.36
2 Renewable Cogeneration 9.71
3 Other Renewables 9.65
4 Solid Waste 2.80
5 Fossil Cogeneration 2.17
6 Natural Gas 56.35
7 Coal 9.73
8 Nuclear 0.64
我不能直接连接字符串,因为这是一个程序,可以产生这些字符串在许多格式。可以是1至4个字符串在列表中,并没有在一个字符串中定义的键数,他们可以有点随机分配给一个字符串。
我有下面的代码段来生成另一个字符串,该字符串稍后将用于创建 Dataframe :
import re
table_energy = []
to_find = ['Wind', 'Water', 'Renewable Cogeneration', 'Other Renewable', 'Solid Waste', 'Fossil Cogeneration', 'Natural Gas', 'Coal', 'Nuclear']
chars_to_find = ['Wind', 'Water', 'Renewable Cogeneration', 'Renewable', 'Waste', 'Fossil Cogeneration', 'Gas', 'Coal', 'Nuclear']
key = ['Wind', 'Water', 'Ren_Cog', 'Other_Ren', 'Sol_Waste', 'Fossil_Cog', 'Nat_Gas', 'Coal', 'Nuclear']
for i in range(len(energy))
for j in range(len(to_find)):
if to_find[j] in energy[i]:
aux_row= energy[i]+' '
expression = chars_to_find[j]+' (.*) '
result = re.search(expression, aux_row)
print(result.group(1))
table_energy.append('key_'+key[j]+' '+result.group(1))
以下是输出:
['key_Wind 1,00 Water 7,36 Renewable Cogeneration 9,71 Other Renewable 9,65 Solid Waste 2,80',
'key_Water 7,36 Renewable Cogeneration 9,71 Other Renewable 9,65 Solid Waste 2,80',
'key_Ren_Cog 9,71 Other Renewable 9,65 Solid Waste 2,80',
'key_Other_Ren 9,65 Solid Waste 2,80',
'key_Sol_Waste 2,80',
'key_Fossil_Cog 2,17',
'key_Nat_Gas 56,35 Coal 9,73 Nuclear 0,64',
'key_Coal 9,73 Nuclear 0,64',
'key_Nuclear 0,64']
我需要每个元素只由键和值组成。我明白这是正则表达式的问题,但我尝试了许多方法,它都不起作用。
任何帮助都很感激,谢谢:)
2条答案
按热度按时间cyej8jka1#
| | 钥匙|价值|
| - ------|- ------|- ------|
| 无|风|1.00美元|
| 1个|水|七、三十六|
| 第二章|可再生热电联产|九、七十一|
| 三个|其他可再生能源|九点六五|
| 四个|固体废弃物|二、八十|
| 五个|化石热电联产|二、十七|
| 七|天然气|五十六、三十五|
| 八个|煤炭|九、七十三|
| 九|核武器|0.64|
fjaof16o2#
您可以使用带有2个捕获组和re. findall的模式,它将返回带有2个值的元组列表(2个捕获组值)
然后,您可以将元组附加到
table_energy
,然后将其提供给Dataframe。模式匹配:
(\S.*?)
捕获组1,匹配单个非空白字符后跟任意字符,尽可能少\s+
匹配1辆以上的whitspace汽车(\d+,\d+)
捕获组2,匹配1+位数,
和1+位数Regex demo|Python demo
示例
产出