如何拆分附加数据,以便将其分为两列?

2024-10-06 11:25:09 发布

您现在位置:Python中文网/ 问答频道 /正文

此代码附加了特定跑步者的最后两次几率波动。这将显示在“flucs3”中。我想将“flucs3”中的数据拆分为数据帧中的独立列—一列表示“Fluc1”,一列表示“Fluc2”

我的代码:

request2 = requests.get('https://www.punters.com.au/api/web/public/Odds/getOddsComparisonCacheable/?allowGet=true&APIKey=65d5a3e79fcd603b3845f0dc7c2437f0&eventId=1051322&betType=FixedWin', headers={'User-Agent': 'Mozilla/5.0'}) 
json2 = request2.json()
for selection in json2['selections']:
    for fluc in selection['flucs'][0]:
        flucs1 = ast.literal_eval(selection['flucs'])
        flucs2 = flucs1[-2:]
        flucs3 = [[x[1]] for x in flucs2]
        data.append(flucs3)

df3的输出:

[[7.63], [7.68]]
[[6.89], [6.9]]
[[6.89], [6.93]]
[[21.04], [20.96]]
[[15.35], [15.43]]
[[18.7], [18.72]]
[[9.83], [9.78]]
[[17.92], [18.07]]
[[26.13], [26.54]]
[[9.13], [9.16]]
[[9.99], [10.08]]
[[8.33], [8.34]]
[[13.9], [14.1]]
[[10.72], [10.85]]

数据帧的期望输出:

Flucs 1   Flucs 2
7.63      7.68
6.89      6.9
6.89      6.93

Tags: 数据代码infor跑步selection几率json2
2条回答

使用from_records尝试此操作:

data = []
request2 = requests.get('https://www.punters.com.au/api/web/public/Odds/getOddsComparisonCacheable/?allowGet=true&APIKey=65d5a3e79fcd603b3845f0dc7c2437f0&eventId=1051322&betType=FixedWin', headers={'User-Agent': 'Mozilla/5.0'}) 
json2 = request2.json()
for selection in json2['selections']:
    for fluc in selection['flucs'][0]:
        flucs1 = ast.literal_eval(selection['flucs'])
        flucs2 = flucs1[-2:]
        flucs3 = [x[1] for x in flucs2] #Note: remove extra brackets from here
        data.append(flucs3)

df3 = pd.DataFrame.from_records(data, columns=['Flucs 1', 'Flucs 2'])

输出:

    Flucs 1  Flucs 2
0      9.05     9.08
1      8.55     8.45
2      7.45     7.55
3     36.62    37.38
4     18.55    18.78
5     14.97    14.89
6     10.09    10.02
7     16.97    17.05
8     30.38    30.77
9      9.82     9.89
10     9.82     9.89
11     9.78     9.61
12     8.91     8.90
13    13.82    13.83

您可以将数据列表中的所有子列表解压到另一个列表(最终列表)中,从中可以创建两个其他列表(一个用于具有奇数索引的元素,即Flucs 1,另一个用于具有偶数索引的元素,即Flucs 2)。像这样:

final_list = (list(itertools.chain.from_iterable(itertools.chain.from_iterable(data))))         

flucs1 = [x for x in final_list if final_list.index(x)%2==1]
flucs2 = [x for x in final_list if final_list.index(x)%2==0]
output = list(zip(flucs1, flucs2)) #a list of tuples of items with corresponding indicies in both list
print('Flucs1', '\t', 'Flucs2')
for i,j in output:
    print(i, '\t',j)

Result

Flucs1   Flucs2
9.08     9.05
8.45     8.55
7.55     7.45
37.38    36.62
18.78    18.55
14.89    14.97
10.02    10.09
17.05    16.97
30.77    30.38
9.89     9.82
9.89     9.82
9.61     9.78
8.9      8.91
13.83    13.82

您还可以在字典中形成列表,并使用熊猫对字典进行数据帧处理:

import pandas as pd
my_dict = {'Flucs 1': flucs1, 'Flucs 2': flucs2}
df = pd.DataFrame(my_dict)
print(df)

相关问题 更多 >