我试图用新的信息更新我的数据库,但我不知道如何更新。
这是我的密码:
import pandas as pd
listofplayers = [['player1', 5,1,300,100],['player2', 10,5,650,150],['player3', 17,6,1100,1050]]
listofplayers2 = [['player1', 105,101,10300,10100],['player11', 1010,105,10650,10150],['player23', 1017,106,101100,101050]]
dictdataframe = {
'player': [],
'win': [],
'loss': [],
'moneywin': [],
'moneyloss': []
}
for i in listofplayers:
y = 0
for k in dictdataframe.keys():
dictdataframe[k].append(i[y])
y +=1
db = pd.DataFrame(dictdataframe)我的产出应该是:
index,player,win,loss,moneywin,moneylost,
0,'player1', 105,101,10300,10100,
1,'player2', 10,5,650,150,
2,'player3', 17,6,1100,1050,
3,'player11', 1010,105,10650,10150,
4,'player23', 1017,106,101100,101050我花了一整天的时间在网上,但我从来没有找到我需要的东西
发布于 2022-03-18 02:19:25
编辑:哎呀,我错过了双player1!你说得对,这是一个更难的问题。我发现的最佳方法是创建两个数据帧,通过player对它们进行索引并调用combine_first。请注意,为此,如果希望df1中的值取代df2,则可以调用df2。如果您想设置自己的规则,可以使用combine,如这里所描述的那样。对此很抱歉!以下是代码:
add_to_dict(listofplayers,dictdataframe1)
add_to_dict(listofplayers2,dictdataframe2)
df1 = pd.DataFrame.from_dict(dictdataframe1).set_index('player')
df2 = pd.DataFrame.from_dict(dictdataframe2).set_index('player')
a = df2.combine_first(df1)我们正在使用下面的add_to_dict函数。现在我们的产出是
win loss moneywin moneyloss
player
player1 105 101 10300 10100
player11 1010 105 10650 10150
player2 10 5 650 150
player23 1017 106 101100 101050
player3 17 6 1100 1050原始答案
不需要双for循环。你和dictdataframe走在正确的轨道上。与其过于花哨地使用多个循环,您只需遍历元素并将它们附加到其中!然后,您所需要做的就是用内置的熊猫方法发送到一个数据框架。
import pandas as pd
listofplayers = [['player1', 5,1,300,100],['player2', 10,5,650,150],['player3', 17,6,1100,1050]]
listofplayers2 = [['player1', 105,101,10300,10100],['player11', 1010,105,10650,10150],['player23', 1017,106,101100,101050]]
dictdataframe = {
'player': [],
'win': [],
'loss': [],
'moneywin': [],
'moneyloss': []
}
for x in listofplayers:
dictdataframe['player'].append(x[0])
dictdataframe['win'].append(x[1])
dictdataframe['loss'].append(x[2])
dictdataframe['moneywin'].append(x[3])
dictdataframe['moneyloss'].append(x[4])
for x in listofplayers2:
dictdataframe['player'].append(x[0])
dictdataframe['win'].append(x[1])
dictdataframe['loss'].append(x[2])
dictdataframe['moneywin'].append(x[3])
dictdataframe['moneyloss'].append(x[4])
df = pd.DataFrame.from_dict(dictdataframe)这给了我们
player win loss moneywin moneyloss
0 player1 5 1 300 100
1 player2 10 5 650 150
2 player3 17 6 1100 1050
3 player1 105 101 10300 10100
4 player11 1010 105 10650 10150
5 player23 1017 106 101100 101050不过,这是相当冗长的。我们可以使用函数将循环抽象出去,如下所示:
def add_to_dict(listplayers,dictionary):
for x in listplayers:
dictionary['player'].append(x[0])
dictionary['win'].append(x[1])
dictionary['loss'].append(x[2])
dictionary['moneywin'].append(x[3])
dictionary['moneyloss'].append(x[4])
return None #we are editing the input dictionary.现在,我们可以调用所有列表上的函数,并将其转换为数据框架!
add_to_dict(listofplayers,dictdataframe)
add_to_dict(listofplayers,dictdataframe)
df = pd.DataFrame.from_dict(dictdataframe)这给了我们同样的输出。如果你真的想加快它的速度,你可以让函数接受一个listofplayers的列表,并提出数据框架,但我将把它作为练习留给你。
https://stackoverflow.com/questions/71521586
复制相似问题