我想撰寫一個函式,該函式采用具有相同結構的多個資料幀,進行特定的轉換并將轉換保存在原地。
虛擬資料幀
df = pd.DataFrame({"Full name" : ["John Doe","Deep Smith","Julia Carter","Kate Newton","Sandy Thompson"],
"Monthly Sales" : [25,30,35,40,45]})
df2 = pd.DataFrame({"Full name" : ["Alicia Williams","Kriten John","Jessica Adams","Isaac Newton","Whitney Gordon"],
"Monthly Sales" : [35,20,50,15,40]})
轉化功能
我不想回傳資料框,而是將這些轉換保存到位。
def tidy_dfs(dfs):
for df in dfs:
# Drop first row
df = df.iloc[1: , :]
# Replace spaces in columns
df.columns = [c.replace(' ', '_') for c in df]
# change cols to lower
df.columns = [c.lower() for c in df]
return df
保存df,df2 = tidy_dfs([df,df2])當然不會起作用,因為我們在回圈之外。
結果 呼叫此函式并保存轉換的方法是什么?
tidy_dfs([df,df2])
uj5u.com熱心網友回復:
編輯:如果通過 DataFrames 串列,您可以回傳另一個串列 ( out) 或修改現有串列dfs。因此,如果沒有像上一步那樣分配回來,就不可能就地 DataFrame 串列。
您的函式不回傳 DataFrame 串列,因此您需要創建空串列并append清理 DataFrame:
def tidy_dfs(dfs):
out = []
for df in dfs:
# Drop first row
df = df.iloc[1: , :]
# Replace spaces in columns
df.columns = [c.replace(' ', '_') for c in df]
# change cols to lower
df.columns = [c.lower() for c in df]
out.append(df)
return out
df,df2 = tidy_dfs([df,df2])
對于就地操作:
def tidy_dfs(dfs):
for df in dfs:
# Drop first row
df.drop(df.index[0], inplace=True)
# Replace spaces in columns and lowercase
df.rename(columns = lambda x: x.replace(' ', '_').lower(), inplace=True)
return dfs
df, df2 = tidy_dfs([df,df2])
uj5u.com熱心網友回復:
問題是,您不能將外部變數重新分配給新的資料幀地址。pandas 試圖避免這種可能很危險的事情,并且總是試圖保存原始資料幀。
可以洗掉所有內容,然后在回圈結束時就地附加新值。但是,這是“丑陋的”(容易出錯且麻煩)..
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525423.html
標籤:Python熊猫
上一篇:從資料幀中的字串之間提取字串
