我有一个非常大的数据帧(大约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] 举报,一经查实,本站将立刻删除。