微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 将数据帧拆分为多个数据帧

我有一个非常大的数据帧(大约100万行),包含来自实验的数据(60位受访者).
我想将数据帧拆分为60个数据帧(每个参与者的数据帧).

在数据框(称为= data)中,有一个名为“name”的变量,它是每个参与者的唯一代码.

我尝试了以下,但没有任何反应(或者不会在一小时内停止).我打算做的是将数据帧(数据)拆分成更小的数据帧并将它们附加到列表(datalist):

import pandas as pd

def splitframe(data, name='name'):

    n = data[name][0]

    df = pd.DataFrame(columns=data.columns)

    datalist = []

    for i in range(len(data)):
        if data[name][i] == n:
            df = df.append(data.iloc[i])
        else:
            datalist.append(df)
            df = pd.DataFrame(columns=data.columns)
            n = data[name][i]
            df = df.append(data.iloc[i])

    return datalist

我没有收到错误消息,脚本似乎永远都会运行!

有一种聪明的方法吗?

解决方法:

首先,你的方法是低效的,因为逐行附加到列表将是缓慢的,因为当新条目的空间不足时必须定期增加列表,在这方面列表推导更好,因为确定了大小前面并分配一次.

但是,我认为从根本上说你的方法有点浪费,因为你已经拥有了一个数据框,那么为什么要为每个用户创建一个新数据框?

我会按列’name’对数据帧进行排序,将索引设置为this,如果需要,不删除列.

然后生成所有唯一条目的列表,然后您可以使用这些条目执行查找,并且至关重要的是,如果您只查询数据,请使用选择标准返回数据框上的视图,而不会产生代价高昂的数据副本.

所以:

# sort the dataframe
df.sort(columns=['name'], inplace=True)
# set the index to be this and don't drop
df.set_index(keys=['name'], drop=False,inplace=True)
# get a list of names
names=df['name'].unique().tolist()
# Now we can perform a lookup on a 'view' of the dataframe
joe = df.loc[df.name=='joe']
# Now you can query all 'joes'

编辑

sort现已弃用,您现在需要使用sort_values:

# sort the dataframe
df.sort_values(by='name', axis=1, inplace=True)
# set the index to be this and don't drop
df.set_index(keys=['name'], drop=False,inplace=True)
# get a list of names
names=df['name'].unique().tolist()
# Now we can perform a lookup on a 'view' of the dataframe
joe = df.loc[df.name=='joe']
# Now you can query all 'joes'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐