簡體   English   中英

使用Main數據框的某些部分,而無需實際將其拆分為小數據框

[英]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.

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