我如何通过:作为python中的函数参数?

时间:2018-12-10 00:25:17

标签: python pandas slice

我正在使用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)

但是由于:,以上内容会给我带来语法错误;如何将其作为函数参数传递?

1 个答案:

答案 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