将大型数据帧拆分为较小的pandas数据帧列表

时间:2017-11-21 23:27:15

标签: python pandas

我有一个如下所示的数据框:

    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7

有没有办法可以将它拆分成一个pandas数据帧列表,每个数据帧都有1行和相同的标题?我可以循环它,但是有更多的pythonic soln吗?

用例是:

with Pool(processes=5) as p:
    p.starmap(parallel_func, list(single_row_of_dataframe))

2 个答案:

答案 0 :(得分:5)

选项1
np.split

for i in np.arange(1, len(df))):
     print(i, '\n')

   y  gdp  cap
0  1    2    5 

   y  gdp  cap
1  2    3    9 

   y  gdp  cap
2  8    7    2 

   y  gdp  cap
3  3    4    7 

   y  gdp  cap
4  6    7    7 

如果您的索引是单调的,您可以使用它来分割:

for i in np.split(df, df.index[1:]):
    print(i, '\n')

请注意,np.split的核心是循环实现,所以你并没有真正逃避迭代。


splits = np.split(df, df.index[1:])

选项2 循环df.index并致电loc

splits = [df.loc[[i]] for i in df.index]

在此处的评论中充实讨论 - 如果您正在寻求进行某种并行化,请查看dask数据帧。不要尝试使用Pool实现自己的并行化,否则您实际上会遇到性能下降。

答案 1 :(得分:3)

或者您可以使用//groupby,我将数据框拆分为3,您可以更改所需的数字

[df1 for _,df1 in df.groupby(np.arange(len(df))//3)]
Out[356]: 
[   y  gdp  cap
 0  1    2    5
 1  2    3    9
 2  8    7    2,    y  gdp  cap
 3  3    4    7
 4  6    7    7]