Я новичок на сайте, но я хотел узнать разницу между приложениями «:» и «=».
Я знаю, что «=» — это оператор присваивания, такой как 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: здесь нельзя назначить литерал. Может быть, вы имели в виду "==" вместо "="?
для «Пола» и остальных -> Ожидаемое имя параметра
Обратите внимание, что вы можете сделать что-то подобное, но только если в именах ваших столбцов нет пробелов: data = pd.DataFrame(dict(age=age, gender=gender))






Вы совершенно правы в том, что это словарь, который передается конструктору 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
* Я упрощаю для новичков. Есть способы сделать это, но мы замалчиваем их как сложные, часто нежелательные темы.
=используется для присвоения переменных или именованных параметров функции,:используется для разделения ключей и значений в словаре.