热门更新熊猫数据库



我正试图用新信息更新我的数据库,但我不知道如何更新。

这是我的代码:

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的列表并吐出数据帧,但我将把它留给你练习。

最新更新