![](/img/trans.png)
[英]Combining Successive Pandas Dataframes in One Master Dataframe via a Loop
[英]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.