![](/img/trans.png)
[英]create a new dataframes with rows from another dataframe with specific columns values
[英]Create Dataframes iteratively from columns of another Dataframe
假設我有一個 df:
df = pd.DataFrame({'A.C.1_v': [1, 2, 3], 'B': ['a', 'b', 'c'], 'C.C.1_f': [4, 5, 6], 'D': ['e', 'f', 'g'], 'E': [7, 8, 9]})
注意到感興趣的列是那些 nmae 包括“C.1_letter”
我已經建立了一個對應於所選列的列表:col_list = [A.C.1_v, C.C.1_f]
Objective: 創建幾個dataframe如下(在這個插圖中只構建了 2 個 dfs,但在實踐中可能會有更多)
第一個df
因此,對於 df_AC1_v,我們將有以下 output: output 1 沒有迭代
第二個df
我的觀點是迭代地執行此操作,但到目前為止,我所嘗試的方法並沒有奏效。
這是我完成的代碼。 它在循環中出錯,我不明白為什么。 首先,我提取 col 列表並創建一個列表,如下所示:
col_list = list(df)
list_c1 = list(filter(lambda x:'.C.1' in x, col_list))
list_c1 = [str(r) for r in list_c1]
輸入: list_c1
輸出:['A.C.1_v', 'C.C.1_f']
其次,我隔離“C.1”
list_c1_bis = []
for element in list_c1:
stock = element.split('.C.1')
list_c1_bis.append(stock)
輸入: list_c1_bis
輸出:[['A', '_v'], ['C', '_f']]
到現在為止,我很開心。 它的錯誤是下面的代碼:
for line in list_c1_bis:
name1 ='df'+'_'+line[0]+'C1'+line[1]
vars()[name1] = df[[list_c1[0],'D','E']]
我的輸出確實如下: in: df_AC1_v
==> OK correct out: output1
在: df_CC1_f
==>錯誤它采用了不合適的列 A.C.1_v,而不是預期的 C.C.1_f output2
歡迎您提出建議!
非常感謝您的時間和幫助,我們將不勝感激
nb:如果您認為您有更好的解決方案,請隨時修改可行的第一步
最親切的問候
我強烈建議您使用vars
、 locals
或globals
動態創建變量。 更喜歡用字典。
嘗試
for col in df.columns[df.columns.str.contains(r'[A-Z]\.[0-9]_[a-z]')]:
name = col.replace('.', '')
locals()[f"df_{name}"] = df[[col, 'D', 'E']]
更新
如果f-strings
不可用(Python < 3.6),請將locals()[f"df_{name}"]
替換為locals()["df_{}".format(name)]
。
Output:
>>> df_AC1_v
A.C.1_v D E
0 1 e 7
1 2 f 8
2 3 g 9
>>> df_CC1_f
C.C.1_f D E
0 4 e 7
1 5 f 8
2 6 g 9
用字典替代:
dfs = {}
for col in df.columns[df.columns.str.contains(r'[A-Z]\.[0-9]_[a-z]')]:
name = col.replace('.', '')
dfs[name] = df[[col, 'D', 'E']]
Output:
>>> dfs['AC1_v']
A.C.1_v D E
0 1 e 7
1 2 f 8
2 3 g 9
>>> dfs['CC1_f']
C.C.1_f D E
0 4 e 7
1 5 f 8
2 6 g 9
嗨,Corralien,首先讓我感謝您的及時回復,我真的很感激。
我試過第一個代碼
for col in df.columns[df.columns.str.contains(r'[A-Z]\.[0-9]_[a-z]')]:
name = col.replace('.', '')
locals()[f"df_{name}"] = df[[col, 'D', 'E']]
但是,我有以下錯誤: File "", line 3 locals()[f"df_{name}"] = df[[col, 'D', 'E']] ^ SyntaxError: invalid syntax
我還嘗試了第二個建議的代碼,它給出了字典下的解決方案。
dfs = {}
for col in df.columns[df.columns.str.contains(r'[A-Z]\.[0-9]_[a-z]')]:
name = col.replace('.', '')
dfs[name] = df[[col, 'D', 'E']]
它運行沒有錯誤,但是當我檢查 DF 是否存在時: df_AC1_v
我有以下錯誤: NameError: name 'df_AC1_v' is not defined
我知道要獲得 df,需要這樣寫:dfs['AC1_v']
第二種解決方案是可以接受的,但如果可行的話,我更喜歡第一種解決方案。
最親切的問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.