Как передать: как параметр функции в Python? - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю с python3 и pandas и хотел бы передать : в качестве параметра функции, чтобы указать все строки в срезе, переданные в df.loc.

Например, скажем, у меня естьфункция, которая заполняет значения n следующим образом:

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 голосов
/ 10 декабря 2018

Используйте 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
...