我正在使用python3和pandas,我想将:
作为函数参数来声明传递给df.loc
的切片中的所有行。
例如,假设我有一个函数可以像这样填充na值:
def fill_na_w_value(df, rows, columns, fill):
for col in columns:
df.loc[rows, columns].fillna(
fill,
inplace=True
)
有时候我可能不想将其应用于某些行,而希望将其应用于所有行,在熊猫中,可以通过df.loc[:, col]
如果我要从函数中调用它
fill_na_w_value(df, :, ['col1'], 0)
但是由于:
,以上内容会给我带来语法错误;如何将其作为函数参数传递?
答案 0 :(得分:2)
使用slice(None)
代表:
。请注意,您可以使用pipe
通过函数传递数据框,并且loc
接受用于行和索引过滤的列表:
df = pd.DataFrame({'col1': [1, 2, np.nan, 4, 5, np.nan, 7, 8, np.nan]})
def fill_na_w_value(df, row_slicer, columns, value):
df.loc[row_slicer, columns] = df.loc[row_slicer, columns].fillna(value)
return df
df1 = df.pipe(fill_na_w_value, slice(None), ['col1'], 0)
print(df1)
col1
0 1.0
1 2.0
2 0.0
3 4.0
4 5.0
5 0.0
6 7.0
7 8.0
8 0.0
下面是使用list
而不是slice
对象的示例:
df2 = df.pipe(fill_na_w_value, [2, 5], ['col1'], 0)
print(df2)
col1
0 1.0
1 2.0
2 0.0
3 4.0
4 5.0
5 0.0
6 7.0
7 8.0
8 NaN