首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >热更新大熊猫数据库

热更新大熊猫数据库
EN

Stack Overflow用户
提问于 2022-03-18 01:41:42
回答 1查看 38关注 0票数 0

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

这是我的密码:

代码语言:javascript
复制
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)

我的产出应该是:

代码语言:javascript
复制
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

我花了一整天的时间在网上,但我从来没有找到我需要的东西

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-18 02:19:25

编辑:哎呀,我错过了双player1!你说得对,这是一个更难的问题。我发现的最佳方法是创建两个数据帧,通过player对它们进行索引并调用combine_first。请注意,为此,如果希望df1中的值取代df2,则可以调用df2。如果您想设置自己的规则,可以使用combine,如这里所描述的那样。对此很抱歉!以下是代码:

代码语言:javascript
复制
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函数。现在我们的产出是

代码语言:javascript
复制
           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走在正确的轨道上。与其过于花哨地使用多个循环,您只需遍历元素并将它们附加到其中!然后,您所需要做的就是用内置的熊猫方法发送到一个数据框架。

代码语言:javascript
复制
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)

这给了我们

代码语言:javascript
复制
     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

不过,这是相当冗长的。我们可以使用函数将循环抽象出去,如下所示:

代码语言:javascript
复制
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.

现在,我们可以调用所有列表上的函数,并将其转换为数据框架!

代码语言:javascript
复制
add_to_dict(listofplayers,dictdataframe)
add_to_dict(listofplayers,dictdataframe)
df = pd.DataFrame.from_dict(dictdataframe)

这给了我们同样的输出。如果你真的想加快它的速度,你可以让函数接受一个listofplayers的列表,并提出数据框架,但我将把它作为练习留给你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71521586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档