[英]Use parts of Main dataframe without actually splitting it into small dataframes pandas
我有一個熊貓數據框,大約有17000行
我想以此創建小型數據框供我使用,以便每個數據框具有6000行。
因此
df1 = 6000 rows
df2 = 6000 rows
df3 = 5000 rows (remaining rows)
這可以通過切片我的main_df來完成
但是使這個小的df會消耗我的ram,是否有任何直接從main_df使用它的方法
作為切片,而沒有實際創建小數據框/
我認為您可以使用RangeIndex
和floor划分創建MultiIndex
:
np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(100,5)), columns=list('ABCDE'))
#change 20 to 6000 in real data
df.index = [pd.RangeIndex(len(df.index)) // 20, df.index]
print (df)
A B C D E
0 0 8 8 3 7 7
1 0 4 2 5 2
2 2 2 1 0 8
3 4 0 9 6 2
4 4 1 5 3 4
5 4 3 7 1 1
6 7 7 0 2 9
7 9 3 2 5 8
8 1 0 7 6 2
9 0 8 2 5 1
10 8 1 5 4 2
11 8 3 5 0 9
12 3 6 3 4 7
13 6 3 9 0 4
14 4 5 7 6 6
15 2 4 2 7 1
16 6 6 0 7 2
17 3 5 4 2 4
18 3 7 9 0 0
19 5 9 6 6 5
1 20 6 4 7 3 9
21 2 3 8 7 1
22 5 9 3 0 6
...
...
然后通過xs
選擇:
print (df.xs(0, axis=0, level=0))
A B C D E
0 8 8 3 7 7
1 0 4 2 5 2
2 2 2 1 0 8
3 4 0 9 6 2
4 4 1 5 3 4
5 4 3 7 1 1
6 7 7 0 2 9
7 9 3 2 5 8
8 1 0 7 6 2
9 0 8 2 5 1
10 8 1 5 4 2
11 8 3 5 0 9
12 3 6 3 4 7
13 6 3 9 0 4
14 4 5 7 6 6
15 2 4 2 7 1
16 6 6 0 7 2
17 3 5 4 2 4
18 3 7 9 0 0
19 5 9 6 6 5
您可以只分配切片范圍,並使用這些切片范圍使用iloc
切片orig df並傳遞以下切片范圍:
In[53]:
df = pd.DataFrame(np.random.randn(10,3), columns=list('abs'))
df
Out[53]:
a b s
0 0.487646 1.925704 -1.249352
1 -0.276991 -0.077153 -0.318227
2 2.030931 -0.301918 0.467074
3 -0.059828 1.965713 -1.284751
4 -1.022199 0.825156 1.582900
5 1.022663 0.204184 0.644900
6 -2.398288 0.175664 -0.808225
7 -0.600876 -1.359850 0.817557
8 0.039713 0.077957 0.167178
9 0.051465 -1.499899 2.051932
現在,只需將切片范圍分配給變量,然后將其傳遞給iloc
:
In[55]:
df1 = slice(0,3)
df2 = slice(3,6)
df3 = slice(6,df.shape[0])
print(df.iloc[df1])
print(df.iloc[df2])
print(df.iloc[df3])
a b s
0 0.487646 1.925704 -1.249352
1 -0.276991 -0.077153 -0.318227
2 2.030931 -0.301918 0.467074
a b s
3 -0.059828 1.965713 -1.284751
4 -1.022199 0.825156 1.582900
5 1.022663 0.204184 0.644900
a b s
6 -2.398288 0.175664 -0.808225
7 -0.600876 -1.359850 0.817557
8 0.039713 0.077957 0.167178
9 0.051465 -1.499899 2.051932
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.