我必須創建一個新的資料框,其中每一列都由一個有兩個引數的函式確定。問題是對于每一列,函式需要一個不同的引數,該引數由列的編號給出。資料框中大約有 6k 行和 200 列:
定義新資料框每一列的函式定義如下:
def phiNT(M,nT):
M=M[M.columns[:nT]]
d=pd.concat([M.iloc[:,nT-1]]*nT,axis=1)
d.columns=M.columns
D=M-d
D=D.mean(axis=1)
return D
我嘗試創建一個空資料框,然后使用回圈添加每一列:
A=pd.DataFrame()
for i in range(1,len(M.columns)):
A[i]=phiNT(M,i)
但這就是彈出的內容:
PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
所以我需要一種方法來應用 pd.concat 一次創建所有列。
uj5u.com熱心網友回復:
您應該在串列或生成器中創建所有資料框,然后呼叫pd.concat串列或生成器以創建一個包含所有資料框列的新資料框,而不是為每列執行一次。
以下使用生成器來提高記憶體效率。
results = (phiNT(M,i) for i in range(1,len(M.columns)))
A = pd.concat(results,axis=1)
這就是如何在串列中完成的。
A = pd.concat([phiNT(M,i) for i in range(1,len(M.columns))],axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/529650.html
標籤:Python数据框表现
上一篇:了解崩潰日志中的iOS堆疊跟蹤
