簡體   English   中英

在循環中將主數據幀拆分為多個數據幀-熊貓

[英]Splitting up a Master DataFrame to mutliple DataFrames in a loop- Pandas

我有一個主數據框架

NHE_17.head()

Out[42]: 
                         Var name     1960     1961     1962     1963  
0  Total National Health Expenditures  27214.0  29138.0  31842.0  34595.0   
1                       Out of pocket  12949.0  13357.0  14255.0  15311.0   
2                    Health Insurance   7497.0   8236.0   8999.0   9892.0   
3            Private Health Insurance   5812.0   6468.0   7178.0   7952.0   
4                            Medicare      0.0      0.0      0.0      0.0   

我正在嘗試根據循環中傳遞的索引將此數據幀拆分為多個數據幀:

def slice(idx):
    df_temp= NHE_17.iloc[idx[0]:idx[1]]
    return df_temp

df_list_idx = [['df_1',[0,37]],['df_2',[280,310]]]

for df_name, idx in df_list_idx:
    df = slice(idx)
    df_name= df

因此,理想情況下,我希望將“ df_1”分配給NHE_17.iloc [0:37],將df_2分配給NHE_17.iloc [280:310],依此類推...

但這沒有發生。 df_name保留通過最后索引傳遞而切片的數據幀(在這種情況下為[280:310]),並且沒有分配給'df_name',因為它應該在for循環的最后一行中:

df_name= df 

這與熊貓或數據框無關,而是一個基本的編程問題。 您正在嘗試將變量分配給字符串。 那是:

'a' = 2 # example
'df_1' = df # what you are trying to do in essence. 

Python,或者我知道的任何語言都不會允許您這樣做,因為字符串(例如'df_1' )不是有效的變量名。

相反,我認為最好的方法是將切片添加到列表中。

df_list_idx = [[0,37],[280,310]]
data = []
for idx in df_list_idx:
    df = slice(idx)
    data.append(df)

現在您可以在data變量中建立索引。 相反,如果您還有更多優柔寡斷的想法,那么您可能始終不想創建更多變量。

df_1 = data[0]
df_2 = data[1]

我們可以使用列表中的鍵('df_1','df_2',...)創建一個DataFrames dfs字典。

然后,這是一個填充此字典的循環:

df = pd.DataFrame({'a': range(500)})

df_list_idx = [['df_1',[0,3]],['df_2',[280,284]]]
dfs = {}
for x in df_list_idx:
    k = x[0] # e.g. 'df_1'
    v = x[1] # e.g. [0,3]
    dfs[k] = df.iloc[v[0]:v[1]]

print(dfs['df_1'])
print(dfs['df_2'])

輸出:

   a
0  0
1  1
2  2
       a
280  280
281  281
282  282
283  283

暫無
暫無

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

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