【问题标题】:How to append dataframes from different files, but having same structure?如何附加来自不同文件但具有相同结构的数据帧?
【发布时间】:2020-06-04 06:18:42
【问题描述】:

我有不同的 json 格式数据集,每个文件包含不同的匹配详细信息,但具有相同的列名。我已经隔离了一支球队在一场比赛中的“投篮”。我应该如何修改我的代码,只为不同的比赛拍摄那个特定球队的镜头。

def key_pass(filename):
with open(filename) as f:
    comp = json.load(f)
eng = pd.json_normalize(comp)
for team in eng['possession_team.name'].unique():
    if team != 'Belgium':
        opp = team
eng = pd.json_normalize(comp).assign(Oppn = opp)
eng_pan = eng[['shot.statsbomb_xg','minute','player.name','shot.outcome.name','shot.key_pass_id','location','type.name','play_pattern.name','possession_team.name']]
eng_pan.rename(columns={'shot.statsbomb_xg':'Statsbomb_xG','shot.outcome.name':'Outcome','shot.key_pass_id':'Keypass_id'})
total_attempts = eng_pan.loc[(eng_pan['type.name'] == 'Shot') & (eng_pan['possession_team.name'] == 'Belgium')]
total_attempts.reset_index(drop=True,inplace=True)

return(total_attempts)

当我调用函数时,

total_attempts = key_pass('7584.json')
total_attempts

我得到的输出是,

现在,如果我必须调用另一个文件,我需要该文件中的镜头从前一个文件完成的位置继续。 我应该将文件名作为列表传递吗?并在函数中添加一个 for 循环,但我又该如何追加镜头?

【问题讨论】:

    标签: python-3.x pandas dataframe data-science


    【解决方案1】:

    如果两个 df 具有相同的结构,您可以轻松使用 pandas DataFrame append 方法: (注意忽略索引参数)

    df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
    df
       A  B
    0  1  2
    1  3  4
    df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
       A  B
    0  5  6
    1  7  8
    
    
    df.append(df2, ignore_index=True)
       A  B
    0  1  2
    1  3  4
    2  5  6
    3  7  8
    

    【讨论】:

    • 但是为此我需要为不同的匹配创建不同的数据框,对吧?我只需要一个数据框,我在其中编写了代码来单独分离“镜头”。我需要知道如何添加到现有的 df 而不是创建新的 df 并附加它?
    • 如果您想避免为每个读取的文件创建新的 df,请使用以下输出:comp = json.load(f)(它可能是 python dict 或列表,取决于 json 结构)并使用与我最初发布的相同的附加命令。
    • 感谢 Bukka,我将 append 插入到我的函数中,使用列表调用它,然后创建一个空的 df 进行附加,它工作正常!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2022-10-17
    • 2016-02-19
    相关资源
    最近更新 更多