[英]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:])
選項2在df.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.