Как использовать преобразования данных pandas и Numpy в функции Python?

#python #pandas #dataframe #numpy

Вопрос:

Я пытаюсь выполнить некоторые простые преобразования, используя pandas и NumPy внутри функции. Необходимы следующие преобразования:

  1. Удалить столбец «Проверено» из df
  2. Преобразование массива в фрейм данных (df2)
  3. Объедините два dfs вместе

Я скопировал свой код ниже. Он прекрасно работает вне функции, но я не знаю, как заставить его работать внутри функции.

 df = pd.DataFrame([[1, "John", True], [2, "Ann", False]], columns=["Id", "Login", "Verified"])
array = np.array([[1, 987340123], [2, 187031122]], np.int32)


df.drop(columns=['Verified'], inplace = True)
df2 = pd.DataFrame(data=id_password, index=["0", "1"], columns=["Id", "Password"])
df = df.merge(df2, how = 'inner')

print(df)
 

Я уверен, что есть действительно простое решение, но я полностью застрял и новичок. Любая помощь будет очень признательна.

Ответ №1:

проблема может заключаться в использовании функции print() в функции, вместо этого вы должны вернуть фрейм данных

 def fun(df, array):
    df.drop(columns=['Verified'], inplace = True)
    df2 = pd.DataFrame(data=array, index=["0", "1"], columns=["Id", "Password"])
    df = df.merge(df2, how = 'inner')

    return(df)
 

затем вы можете распечатать результат вызова функции

 print(fun(df, array))
 

Выход:

    Id Login   Password
0   1  John  987340123
1   2   Ann  187031122
 

Комментарии:

1. Спасибо, Патрик. Это именно то, что я искал — очень признателен.

Ответ №2:

Если я вас правильно понимаю, вы хотите объединить df (без Verified столбца) и array :

 df = pd.DataFrame(
    [[1, "John", True], [2, "Ann", False]], columns=["Id", "Login", "Verified"]
)
array = np.array([[1, 987340123], [2, 187031122]], np.int32)

df_out = pd.merge(
    df.drop(columns="Verified"),
    pd.DataFrame(array, columns=["Id", "Password"]),
    on="Id",
)
print(df_out)
 

С принтами:

    Id Login   Password
0   1  John  987340123
1   2   Ann  187031122
 

Комментарии:

1. Спасибо — да, я хотел объединить df и массив ВНУТРИ функции. Патрик (другой комментатор) указал, что вам нужно распечатать функцию, а не просто df: print(fun(df, массив))