我正试图用新信息更新我的数据库,但我不知道如何更新。
这是我的代码:
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
我花了一整天的时间在网上,但我从来没有找到我需要的
EDIT:哇,我错过了双player1
!你是对的,这是一个更加困难的问题。我找到的最好的方法是创建两个数据帧,用player
对它们进行索引,然后调用combine_first
。请注意,为此,如果希望df1中的值取代df2,则需要调用df1.combine_first(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
是正确的。您可以循环遍历元素并将它们附加到元素中,而不是过于喜欢使用多个循环!然后,您所需要做的就是使用内置的pandas方法发送到一个数据帧。
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
的列表并吐出数据帧,但我将把它留给你练习。