該類由一組屬性和功能組成,包括:
屬性:
- df:一個
pandas資料框架。 - df:一個
pandas資料框架。 - numerical_feature_names: 具有數字值的df列。
- label_column_names:要分組的df字串列。
函式:
mean(nums):接收一個數字串列作為輸入,并回傳平均值 。
fill_na(df, numerical_feature_names, label_columns):將類屬性作為輸入并回傳一個轉換后的df。
而這里是類:
class PLUMBER()。
def __init__(self):
################# attributes ################。
self.df=df
# specify label and numerical features names:
self.numerical_feature_names=數字特征名稱
self.label_column_names=label_column_names
##################### mean ##############################
def mean(self, nums)。
total=0.0。
for num in nums。
total=total num
return total/len(nums)。
############ 填充數字特征 ##################
def fill_na(self, df, numerical_feature_names, label_column_names)。
# declaring parameters:.
df=self.df
numerical_feature_names=self.numerical_feature_names
label_column_names=self.label_column_names
# now replacing NaN with group mean。
for numerical_feature_name in numerical_feature_names:
df[numerical_feature_name]=df.groupby([label_column_names]).transform(lambda x: x.fillna(self.mean(x))
return df
當試圖將其應用于pandas的df時:
if __name__=="__main__"/span>。
# initialize class.
plumber=PLUMBER()
# 用組平均值替換NaN。
df=plumber.fill_na(df=df, numerical_feature_names=數字特征名稱, label_column_names=標簽列名稱)
下一個錯誤出現了:
ValueError。柵欄和軸必須是相同的長度
資料和類的引數
import pandas as pd
d={'month': ['01/01/2020', '01/02/2020', '01/03/2020', '01/01/2020', '01/02/2020', '01/03/2020'] 。
'country': ['Japan', 'Japan', 'Japan', '波蘭', '波蘭', '波蘭'] 。
'level': ['A01'/span>, 'A01'/span>, 'A01'/span>, 'A00','A00', 'A00'] 。
'job title': ['洞察力經理', '洞察力經理', '洞察力經理', '銷售總監', '銷售總監', '銷售總監'] 。
'number':[np.nan, 450, 299, np.nan, 19, 29] 。
'age':[np.nan, 30, 28, np.nan, 29, 18]}。
df=pd.DataFrame(d)
# headers[/span
column_names=df.columns.values.tolist()
column_names= [column_name.strip() for column_name in column_names]
# label_column_names (to be grouped)
label_column_names=['country', 'level', 'job title']
# numerical_features:/span>
numerical_feature_names = [x for x in column_names if xnot in label_column_names]
numerical_feature_names.remove('month')
我怎樣才能改變這個類,以便得到轉換后的df(即用它的組平均值替換np.nan的那個)?
uj5u.com熱心網友回復:
首先,這個錯誤是因為label_column_names已經是一個list,所以在groupby中你不需要在它周圍加上[]。所以它應該是df.groupby(label_column_names)...而不是df.groupby([label_column_names])...
現在,為了真正解決你的問題,在你的類的函式fill_na中,將回圈for(你實際上不需要它)改為
df[numerical_feature_names] = (
df[numerical_feature_names] = (
.fillna(
df.groupby(label_column_names)
[numerical_feature_names].transform('mean')
)
)
在這個程序中,你通過groupy.tranform的結果對numerical_feature_names列進行填充,這些列的mean
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/313120.html
標籤:
