我有以下已簡化的串列:
my_list = ['select', 'fruit1', 'fruit2, 'fruit3', 'from', 'basket1',
'select', 'fruit4', 'from', 'basket2',
'select', 'fruit5', 'fruit6' 'from', 'basket3', ..... so on]
請注意我的串列如何具有“select”和“from”陳述句。
我試圖實作的輸出是一個 DataFrame 或者讓我們說 Excel 輸出:
Fruit number Basket number
fruit1 basket1
fruit2 basket1
fruit3 basket1
fruit4 basket2
fruit5 basket3
fruit6 basket3
. .
. .
. .
. .
有沒有辦法達到這個結果?我已經嘗試了很多東西,但它不起作用.. :(
uj5u.com熱心網友回復:
類似于下面的內容(使用簡單的“狀態機”)
import pandas as pd
lst = ['select', 'fruit1', 'fruit2', 'fruit3', 'from', 'basket1',
'select', 'fruit4', 'from', 'basket2',
'select', 'fruit5', 'fruit6', 'from', 'basket3']
data = []
fruits = []
state = 'select'
for word in lst:
if word == 'select':
state = 'select'
continue
if word == 'from':
state = 'basket'
continue
if state == 'select':
fruits.append(word)
if state == 'basket':
for f in fruits:
data.append({'fruit':f,'basket':word})
fruits = []
df = pd.DataFrame(data)
print(df)
輸出
fruit basket
0 fruit1 basket1
1 fruit2 basket1
2 fruit3 basket1
3 fruit4 basket2
4 fruit5 basket3
5 fruit6 basket3
uj5u.com熱心網友回復:
有很多方法可以做到這一點。這種方法獲取所有 'from' 的索引,并使用前面拆分 2 個空格,np.split以便每個新陣列的開始都是一個 'select'。最后一個是空的,所以我們將放棄它。
然后,您可以通過對每個陣列進行切片來構建一個 dict,并從中生成一個資料幀。
import numpy as np
import pandas as pd
my_list = ['select', 'fruit1', 'fruit2', 'fruit3', 'from', 'basket1',
'select', 'fruit4', 'from', 'basket2',
'select', 'fruit5', 'fruit6', 'from', 'basket3']
f = [i 2 for i, x in enumerate(my_list) if x == "from"][:-1]
s = np.split(my_list,f)
df = pd.DataFrame([{'basket':q[-1],'fruits':q[1:-2]} for q in s])
df = df.explode('fruits')
輸出
basket fruits
0 basket1 fruit1
0 basket1 fruit2
0 basket1 fruit3
1 basket2 fruit4
2 basket3 fruit5
2 basket3 fruit6
uj5u.com熱心網友回復:
data = {'Select' : {'Fruit_Number':
['fruit1','fruit2','fruit3']},'From' : {'Basket_Number':
['basket1','basket2','basket3']}}
data2 = data['Select']
data3 = data['From']
df2 = pd.DataFrame.from_dict(data2)
df3 = pd.DataFrame.from_dict(data3)
l = [df2,df3]
df_all = pd.concat(l,axis=1)
Fruit_Number Basket_Number
0 fruit1 basket1
1 fruit2 basket2
2 fruit3 basket3
uj5u.com熱心網友回復:
制作一個通用且可重用的split功能,就像這個問題的答案中的功能一樣。然后更容易從每個拆分組中產生對。
def split(sequence, sep):
group = []
for item in sequence:
if item == sep:
yield group
group = []
else:
group.append(item)
yield group
def parse_select(tokens):
for group in split(tokens, "select"):
for item in group[:-2]:
yield item, group[-1]
import pandas as pd
print(pd.DataFrame(parse_select(my_list)))
或者:
def parse_select(tokens):
for group in split(tokens, "select"):
if group:
items, (basket,) = split(group, "from")
for item in items:
yield item, basket
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/390633.html
上一篇:列舉列中的值
