В чем разница или когда я должен применять «:» против «=» в Python?

Я новичок на сайте, но я хотел узнать разницу между приложениями «:» и «=».

Я знаю, что «=» — это оператор присваивания, такой как a= 12, поэтому, например, b = любой DataFrame, c может быть c= b.copy()... но я смотрел следующий код и не понимал, почему вместо «=» они используют « :", чтобы присвоить значения столбцов pandas. Я знаю, что это соответствует структуре словаря, но я читал, что для словаря значения не могут повторяться при первом создании. Итак, в этом примере создания df:

n = 100 # Number of registrations
age = np.random.randint(18, 25, n)
gender = np.random.choice(['M', 'F'], n)
math_score = np.random.randint(0, 100, n)
english_score = np.random.randint(0, 100, n)
physics_score = np.random.randint(0, 100, n)
# Compute Average
average_score = (math_score + english_score + physics_score) / 3
# Create dataFrame
data = pd.DataFrame({
'Age': age,
'Gender': gender,
'Math Score': math_score,
'English Score': english_score,
'Physics Score': physics_score,
'Average Score': average_score
})

Я не могу полностью понять соответствие между этой структурой и тем, что я читал (HubSpot), что должны быть уникальные значения ... если каждое значение задается рандомизированным, это наиболее вероятно, чем в 100 повторениях по крайней мере одно значение то же самое. Но мне также знакома эта конструкция dataFrame со структурой, похожей на словарь. Однако то, что я относительно новичок в программировании, меня смущает...

В любом случае, я сомневаюсь еще и потому, что я проверял kwargs Seaborn Boxplot и обнаружил, что для настройки медианы и средней визуализации это что-то вроде этого (это то, что я делал до сих пор и работает нормально, но я не чувствую себя комфортно заставить что-то работать, но не зная, что я сделал...):

sns.boxplot(x = "Age", data= df, orient  = "h", color= "darkblue", medianprops = {"color": "red"}, boxprops = {"facecolor": (0, 0, 1, .7)},
            showmeans= True, meanprops = {"marker": "o", "markerfacecolor": "black", "markeredgecolor": "black", "markersize": "6"})

Заранее спасибо, я знаю, что это довольно длинно, и я уверен, что его можно было бы написать меньшим количеством строк... работаю над этим! "="

В обоих случаях при замене «:» на «=», например:

data = pd.DataFrame({
'Age'= age,
'Gender'= gender,
'Math Score'= math_score,
'English Score'= english_score,
'Physics Score'= physics_score,
'Average Score'= average_score
})

Он подчеркивает «Возраст», «Пол», ..., «Средний балл», говоря:

for Age -> SyntaxError: здесь нельзя назначить литерал. Может быть, вы имели в виду "==" вместо "="? для «Пола» и остальных -> Ожидаемое имя параметра

= используется для присвоения переменных или именованных параметров функции, : используется для разделения ключей и значений в словаре.
Barmar 30.06.2023 21:25

Обратите внимание, что вы можете сделать что-то подобное, но только если в именах ваших столбцов нет пробелов: data = pd.DataFrame(dict(age=age, gender=gender))

slothrop 30.06.2023 21:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы совершенно правы в том, что это словарь, который передается конструктору pd.DataFrame для создания вашего фрейма данных. Однако неверно, что словарь не может иметь повторяющихся значений. Только не может иметь повторяющихся ключей. Так что это вполне разрешено

{
    "a": 1,
    "b": 1,
}

где ключ "a" и "b" соответствуют значению 1. Однако это:

{
    "a": 1,
    "a": 2,
}

не будет работать. Или он будет, но он просто переопределит первый, предоставив этот словарь:

{
    "a": 2,
}

Причина, по которой мы можем иметь одно и то же значение много раз, но не одни и те же ключи, заключается в том, что мы индексируем словарь только в одном направлении. Таким образом, мы используем dct[key] только для получения соответствующего значения, что не имело бы смысла, если бы оно давало нам несколько. Но вполне возможно, что несколько человек, например, имеют одинаковый возраст, поэтому несколько значений не являются проблемой.

Надеюсь это поможет :)

Ответ принят как подходящий

= используется для присвоения переменной значения. : используется для отделения ключа от его значения в конструкции словаря. Ключ не является переменной, поэтому он не использует =. Ключ является индексом в словаре. Переменные и ключи словаря — похожие, но разные понятия (на самом деле вы можете получить словарь, содержащий ваши переменные, но я не хочу вас запутать).

Ключ словаря — это то, что вы передаете в виде строки [], чтобы получить его значение. Например, если у вас есть словарь:

d = { 'Age': 33, 'Gender': 'male' }

вы бы напечатали возраст с помощью print(d['Age']). (Здесь d — это переменная, которая содержит словарь.) Если бы Age была переменной, у вас было бы:

Age = 33

и распечатайте его с помощью print(Age). Обратите внимание, что переменные не заключены в кавычки, а литералы ключей словаря заключены в кавычки. Но это позволяет вам сделать это:

key='Age'
print(d[key])

Выход:

33

Это не работает для переменной *. Это позволяет программно выполнять доступ к значениям, например

dict_list = [ f'{k}: {v}' for k,v in d.items()]
print('\n'.join(dict_list))

Результат этого:

Age: 33
Gender: male

* Я упрощаю для новичков. Есть способы сделать это, но мы замалчиваем их как сложные, часто нежелательные темы.

Другие вопросы по теме