簡體   English   中英

將大型數據幀拆分為較小的pandas數據幀列表

[英]Splitting large dataframe into list of smaller pandas dataframes

我有一個如下所示的數據框:

    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))

選項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:])

選項2df.index循環並調用loc

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

在這里的評論中dask討論 - 如果您正在尋求某種並行化,請查看dask數據幀。 不要嘗試使用Pool實現自己的並行化,實際上會降低性能。

或者您可以使用//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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM