متغیرها و انواع داده در پایتون (Python Variables and Data Types)؛ راهنمای جامع با مثالهای کاربردی
متغیرها (Variables) و انواع داده (Data Types) از بنیادیترین مفاهیم برنامهنویسی Python هستند. هر برنامه برای ذخیره، پردازش و تحلیل اطلاعات به داده نیاز دارد و نوع هر داده مشخص میکند چه عملیاتی را میتوان روی آن انجام داد.
برای مثال، تعداد سفارشهای یک فروشگاه باید بهصورت عدد صحیح ذخیره شود، قیمت محصولات معمولاً به نوع عددی اعشاری نیاز دارد، نام مشتری یک مقدار متنی است و وضعیت پرداخت را میتوان با مقدار منطقی True یا False نمایش داد.
در Python، متغیرها برای ارجاع به اشیای مختلف استفاده میشوند و هر شیء یک نوع مشخص دارد. Python از سیستم Dynamic Typing استفاده میکند؛ بنابراین لازم نیست هنگام تعریف متغیر، نوع آن را از قبل اعلام کنید.
در این راهنما یاد میگیرید:
- متغیر در Python چیست و چگونه ساخته میشود؟
- تفاوت Variable، Object و Data Type چیست؟
- انواع داده اصلی Python کداماند؟
- چگونه نوع یک مقدار را با
type()وisinstance()بررسی کنیم؟ - چگونه نوع دادهها را بهدرستی تبدیل کنیم؟
- تفاوت دادههای Mutable و Immutable چیست؟
- نوع داده چه تأثیری بر تحلیل داده با Python و کتابخانه Pandas دارد؟
- چگونه از خطاهای رایج مربوط به متغیرها و انواع داده جلوگیری کنیم؟
۱. متغیر (Variable) در پایتون چیست؟
متغیر در Python نامی است که به یک شیء (Object) ارجاع میدهد. این نام به برنامهنویس اجازه میدهد در بخشهای مختلف برنامه به یک مقدار دسترسی داشته باشد و از آن در محاسبات یا عملیات مختلف استفاده کند.
برای مثال:
age = 28
name = "Baraman"
height = 1.78
is_student = Trueدر این مثال چهار متغیر ساختهایم:
| نام متغیر | مقدار | نوع داده |
|---|---|---|
age | 28 | int |
name | "Baraman" | str |
height | 1.78 | float |
is_student | True | bool |
درک یک نکته مهم است: در Python، متغیر خودش یک محفظه با نوع ثابت نیست. نام متغیر به یک شیء اشاره میکند و نوع به آن شیء تعلق دارد.
نحوه تخصیص مقدار به متغیر
برای تعریف یک متغیر از عملگر انتساب (=) استفاده میشود:
variable_name = valueمثال:
sales = 250در این دستور، نام sales به شیء عددی 250 ارجاع داده میشود.
میتوان مقدار یک متغیر را در ادامه برنامه تغییر داد:
sales = 250
sales = 320
print(sales)خروجی:
320در این مثال، نام sales ابتدا به عدد ۲۵۰ و سپس به عدد ۳۲۰ ارجاع داده شده است.
آیا نوع متغیر در Python ثابت است؟
خیر. Python یک زبان با نوعدهی پویا (Dynamically Typed Language) است. یعنی یک نام میتواند در طول اجرای برنامه به اشیایی با انواع متفاوت ارجاع دهد.
data = 100
print(type(data))
data = "Python"
print(type(data))خروجی:
<class 'int'>
<class 'str'>در ابتدا data به یک عدد صحیح اشاره میکند و سپس به یک رشته متنی ارجاع داده میشود.
این ویژگی انعطافپذیری زیادی ایجاد میکند، اما برنامهنویس باید هنگام تغییر نوع داده مراقب عملیات ناسازگار باشد.
۲. قواعد نامگذاری متغیرها در Python
انتخاب نام مناسب برای متغیرها باعث خوانایی بیشتر کد و کاهش خطاهای برنامهنویسی میشود.
Python برای نامگذاری متغیرها قواعد مشخصی دارد:
۱. نام متغیر باید با یک حرف یا علامت زیرخط (_) شروع شود.
۲. نام متغیر نمیتواند با عدد شروع شود.
۳. استفاده از فاصله در نام متغیر مجاز نیست.
۴. حروف، اعداد و علامت زیرخط میتوانند در ادامه نام استفاده شوند.
۵. نام متغیرها به حروف بزرگ و کوچک حساس است؛ بنابراین age و Age دو نام متفاوت هستند.
۶. کلمات رزروشده Python مانند if، for، class و return را نمیتوان بهعنوان نام متغیر استفاده کرد.
مثال:
# Valid variable names
age = 28
user_name = "Ali"
total_sales = 1500
_private_value = 10
product2 = "Laptop"
# Invalid variable names
# 2product = "Laptop"
# user name = "Ali"
# class = "Python"چرا استفاده از snake_case توصیه میشود؟
در Python، سبک رایج نامگذاری متغیرها و توابع، snake_case است. در این روش کلمات با علامت زیرخط از یکدیگر جدا میشوند.
مثال:
customer_name = "Sara"
monthly_revenue = 25000
average_order_value = 125.75این نامها از نامهای مبهمی مانند x، a1 یا value2 خواناتر هستند؛ بهخصوص در پروژههای تحلیل داده که ممکن است دهها یا صدها متغیر داشته باشند.
برای مطالعه استانداردهای نامگذاری میتوانید به راهنمای رسمی PEP 8 – Style Guide for Python Code مراجعه کنید.
۳. انواع داده در Python (Python Data Types)
هر شیء در Python دارای یک نوع مشخص است. نوع داده تعیین میکند که چه عملیات و رفتارهایی برای آن شیء تعریف شدهاند.
انواع داده داخلی Python را میتوان به چند گروه اصلی تقسیم کرد:
| گروه | انواع داده | کاربرد |
|---|---|---|
| عددی (Numeric) | int, float, complex | محاسبات ریاضی و عددی |
| متنی (Text) | str | ذخیره و پردازش متن |
| منطقی (Boolean) | bool | نمایش درست یا نادرست بودن یک شرط |
| نبود مقدار | NoneType | نمایش نبود یک مقدار |
| دنبالهای (Sequence) | list, tuple, range | نگهداری مجموعهای از مقادیر با ترتیب مشخص |
| مجموعهای (Set) | set, frozenset | نگهداری مقادیر یکتا |
| نگاشت (Mapping) | dict | ذخیره اطلاعات به شکل کلید و مقدار |
| داده باینری (Binary) | bytes, bytearray, memoryview | کار با دادههای باینری |
در ادامه، انواع مهمتر را با مثال بررسی میکنیم.
۴. انواع داده عددی (Numeric Data Types)
Python سه نوع داده عددی اصلی دارد: int، float و complex.
۴.۱. عدد صحیح (int)
نوع int برای ذخیره اعداد صحیح، بدون بخش اعشاری، استفاده میشود.
مثال:
age = 28
number_of_orders = 150
temperature = -5
print(type(age))خروجی:
<class 'int'>کاربردهای رایج int عبارتاند از:
- تعداد کاربران یک سامانه
- تعداد محصولات فروختهشده
- شماره مراحل یک فرایند
- تعداد دفعات انجام یک عملیات
- شمارش نمونهها در یک مجموعه داده
مثال در تحلیل داده:
total_orders = 1250
completed_orders = 1180
cancelled_orders = 70
print(total_orders - completed_orders)خروجی:
70۴.۲. عدد اعشاری (float)
نوع float برای ذخیره اعداد دارای بخش اعشاری استفاده میشود.
مثال:
product_price = 125.75
average_score = 18.65
temperature = 36.8
print(type(product_price))خروجی:
<class 'float'>کاربردهای رایج:
- قیمت محصولات
- میانگین فروش
- درصد رشد
- اندازهگیریهای فیزیکی
- نتایج محاسبات آماری
- دادههای آزمایشگاهی
مثال:
total_sales = 12500.50
number_of_orders = 100
average_order_value = total_sales / number_of_orders
print(average_order_value)خروجی:
125.005نکته مهم درباره دقت float: اعداد اعشاری در Python معمولاً با نمایش ممیز شناور دودویی ذخیره میشوند. به همین دلیل بعضی مقادیر اعشاری را نمیتوان دقیقاً نمایش داد.
print(0.1 + 0.2)خروجی ممکن است چنین باشد:
0.30000000000000004این رفتار یک ویژگی شناختهشده نمایش اعداد ممیز شناور است، نه لزوماً خطای محاسباتی برنامهنویس.
برای مقایسه تقریبی اعداد اعشاری میتوان از math.isclose() استفاده کرد:
import math
result = 0.1 + 0.2
print(math.isclose(result, 0.3))خروجی:
Trueبرای محاسبات مالی که به دقت دهدهی مشخص نیاز دارند، استفاده از ماژول decimal میتواند مناسبتر باشد.
from decimal import Decimal
price1 = Decimal("0.10")
price2 = Decimal("0.20")
print(price1 + price2)خروجی:
0.30۴.۳. اعداد مختلط (complex)
نوع complex برای نمایش اعداد مختلط استفاده میشود. این اعداد شامل بخش حقیقی و موهومی هستند.
z = 3 + 4j
print(type(z))
print(z.real)
print(z.imag)خروجی:
<class 'complex'>
3.0
4.0این نوع داده در برخی کاربردهای مهندسی، پردازش سیگنال، ریاضیات و محاسبات علمی اهمیت دارد.
۵. داده متنی (String – str)
نوع str برای ذخیره و پردازش رشتههای متنی استفاده میشود.
رشته میتواند شامل حروف، اعداد، فاصلهها، علائم نگارشی و کاراکترهای Unicode باشد.
مثال:
name = "Baraman"
city = "Tehran"
product_code = "PRD-1025"
print(type(name))خروجی:
<class 'str'>برای تعریف رشته میتوان از کوتیشن تکی یا دوتایی استفاده کرد:
first_name = 'Ali'
last_name = "Ahmadi"عملیات رایج روی رشتهها
اتصال رشتهها (Concatenation):
first_name = "Ali"
last_name = "Ahmadi"
full_name = first_name + " " + last_name
print(full_name)خروجی:
Ali Ahmadiتبدیل حروف به بزرگ یا کوچک:
text = "Python Data Analysis"
print(text.upper())
print(text.lower())دسترسی به بخشی از رشته (Slicing):
language = "Python"
print(language[0])
print(language[0:3])خروجی:
P
Pytاستفاده از f-string:
برای ترکیب متن و متغیرها میتوان از f-string استفاده کرد:
name = "Sara"
age = 25
message = f"{name} is {age} years old."
print(message)خروجی:
Sara is 25 years old.آیا عددی که داخل کوتیشن قرار دارد، عدد است؟
خیر. این دو مقدار از نظر نوع داده متفاوتاند:
number1 = 100
number2 = "100"
print(type(number1))
print(type(number2))خروجی:
<class 'int'>
<class 'str'>مقدار اول عدد صحیح است، اما مقدار دوم یک رشته متنی شامل سه کاراکتر است.
بنابراین:
print(100 + 50)خروجی:
150اما:
print("100" + "50")خروجی:
10050در حالت دوم، Python دو رشته را به یکدیگر متصل میکند؛ جمع عددی انجام نمیشود.
۶. نوع داده منطقی (Boolean – bool)
نوع bool فقط دو مقدار ممکن دارد:
True: درستFalse: نادرست
این نوع داده در شرطها، فیلترکردن دادهها، کنترل جریان برنامه و تصمیمگیریهای منطقی کاربرد دارد.
مثال:
is_active = True
is_paid = False
print(type(is_active))خروجی:
<class 'bool'>عملیات مقایسهای و تولید مقدار Boolean
عملگرهای مقایسهای در Python نتیجهای از نوع bool تولید میکنند.
age = 25
print(age > 18)
print(age == 25)
print(age < 18)خروجی:
True
True
Falseعملگرهای مهم مقایسهای:
| عملگر | معنی |
|---|---|
== | برابر با |
!= | نابرابر با |
> | بزرگتر از |
< | کوچکتر از |
>= | بزرگتر یا مساوی |
<= | کوچکتر یا مساوی |
کاربرد Boolean در تحلیل داده
فرض کنید میخواهیم مشخص کنیم کدام سفارشها پرداخت شدهاند:
order_price = 250
minimum_price = 200
is_eligible = order_price >= minimum_price
print(is_eligible)خروجی:
Trueمقدار Boolean میتواند برای فیلترکردن دادهها در Pandas نیز استفاده شود؛ برای مثال، انتخاب تمام سفارشهایی که ارزش آنها بیشتر از یک مقدار مشخص است.
۷. مقدار None در Python چیست؟
None یک مقدار ویژه در Python است که برای نمایش نبود مقدار (Absence of a Value) استفاده میشود.
نوع آن NoneType است و تنها یک مقدار از این نوع وجود دارد: None.
مثال:
result = None
print(result)
print(type(result))خروجی:
None
<class 'NoneType'>کاربردهای رایج None عبارتاند از:
- زمانی که هنوز مقداری برای یک متغیر تعیین نشده است.
- زمانی که یک تابع مقدار مشخصی برنمیگرداند.
- زمانی که یک نتیجه یا داده در دسترس نیست.
- زمانی که نبود مقدار باید بهصورت صریح نمایش داده شود.
مثال:
user_email = None
if user_email is None:
print("Email is not available.")خروجی:
Email is not available.تفاوت None با صفر و رشته خالی
این مقادیر یکسان نیستند:
value1 = None
value2 = 0
value3 = ""
value4 = False| مقدار | مفهوم | نوع داده |
|---|---|---|
None | نبود مقدار | NoneType |
0 | عدد صفر | int |
"" | رشته خالی | str |
False | مقدار منطقی نادرست | bool |
در برنامهنویسی و تحلیل داده، اشتباهگرفتن این مقادیر میتواند باعث نتیجهگیری نادرست شود.
برای بررسی None معمولاً از is None استفاده میکنیم:
if value1 is None:
print("Missing value")۸. ساختارهای داده در Python: List، Tuple، Dictionary و Set
علاوه بر انواع پایه، Python ساختارهایی برای نگهداری مجموعهای از دادهها ارائه میدهد. چهار ساختار مهم آن list، tuple، dict و set هستند.
۸.۱. لیست (List)
لیست برای ذخیره چند مقدار در یک مجموعه مرتب استفاده میشود. لیستها تغییرپذیر (Mutable) هستند؛ یعنی میتوان پس از ایجاد، عناصر آنها را تغییر داد، اضافه کرد یا حذف کرد.
sales = [120, 150, 180, 210]
sales.append(250)
print(sales)خروجی:
[120, 150, 180, 210, 250]دسترسی به عناصر:
print(sales[0])
print(sales[-1])خروجی:
120
250کاربردهای List:
- ذخیره مقادیر فروش روزانه
- نگهداری نمرات دانشجویان
- ذخیره مجموعهای از نام مشتریان
- جمعآوری نتایج یک آزمایش
۸.۲. تاپل (Tuple)
تاپل نیز یک مجموعه مرتب از مقادیر است، اما برخلاف List تغییرناپذیر (Immutable) است.
coordinates = (35.6892, 51.3890)
print(coordinates[0])خروجی:
35.6892پس از ایجاد Tuple نمیتوان عناصر آن را مستقیماً تغییر داد:
coordinates = (35.6892, 51.3890)
# This will raise TypeError:
# coordinates[0] = 40.0Tuple برای نگهداری مجموعههایی از مقادیر که نباید از طریق عملیات معمول تغییر کنند، مناسب است.
نکته: تغییرناپذیری Tuple به معنی تغییرناپذیری تمام اشیای داخل آن نیست. اگر یک Tuple شامل یک List باشد، خود List همچنان میتواند تغییر کند.
۸.۳. دیکشنری (Dictionary)
Dictionary دادهها را به شکل جفتهای کلید و مقدار (Key-Value Pairs) ذخیره میکند.
مثال:
customer = {
"name": "Sara",
"age": 28,
"city": "Tehran",
"is_active": True
}
print(customer["name"])خروجی:
Saraبرای تغییر مقدار یک کلید:
customer["age"] = 29برای اضافهکردن یک کلید جدید:
customer["email"] = "sara@example.com"Dictionary برای نمایش دادههای ساختاریافته، اطلاعات مشتریان، مشخصات محصولات و تنظیمات برنامه کاربرد زیادی دارد.
۸.۴. مجموعه (Set)
Set مجموعهای از مقادیر یکتا است؛ یعنی مقادیر تکراری در آن نگهداری نمیشوند.
numbers = {1, 2, 3, 3, 4, 4, 5}
print(numbers)خروجی:
{1, 2, 3, 4, 5}یکی از کاربردهای مهم Set حذف مقادیر تکراری و انجام عملیات مجموعهای است.
group_a = {1, 2, 3, 4}
group_b = {3, 4, 5, 6}
print(group_a.intersection(group_b))
print(group_a.union(group_b))خروجی:
{3, 4}
{1, 2, 3, 4, 5, 6}۹. چگونه نوع داده را در Python بررسی کنیم؟
دو ابزار مهم برای بررسی نوع داده، تابعهای type() و isinstance() هستند.
تابع type()
تابع type() نوع دقیق یک شیء را برمیگرداند.
age = 28
price = 125.75
name = "Python"
is_active = True
print(type(age))
print(type(price))
print(type(name))
print(type(is_active))خروجی:
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>تابع isinstance()
تابع isinstance() بررسی میکند که آیا یک شیء از یک نوع مشخص یا زیرنوع آن است یا خیر.
age = 28
print(isinstance(age, int))
print(isinstance(age, str))خروجی:
True
Falseبرای بررسی چند نوع احتمالی نیز میتوان از Tuple استفاده کرد:
value = 25.5
if isinstance(value, (int, float)):
print("Numeric value")تفاوت مهم: type() نوع دقیق شیء را نشان میدهد، اما isinstance() برای بررسی سازگاری نوع و وراثت نیز مناسب است.
برای مثال، در Python نوع bool زیرنوعی از int است:
print(isinstance(True, int))خروجی:
Trueبه همین دلیل اگر میخواهید صرفاً مقدارهای Boolean را از اعداد جدا کنید، باید این رفتار را در طراحی بررسی نوع در نظر بگیرید.
۱۰. تبدیل نوع داده در Python (Type Casting)
گاهی دادهای که دریافت میکنیم از نوع موردنیاز برنامه نیست. در این شرایط میتوان با استفاده از تابعهای تبدیل، نوع آن را تغییر داد.
تبدیل نوع داده (Type Conversion یا Type Casting) معمولاً با تابعهایی مانند موارد زیر انجام میشود:
| تابع | کاربرد | مثال |
|---|---|---|
int() | تبدیل به عدد صحیح | int("25") |
float() | تبدیل به عدد اعشاری | float("12.5") |
str() | تبدیل به رشته | str(100) |
bool() | تبدیل به مقدار منطقی | bool(1) |
list() | تبدیل به لیست | list((1, 2)) |
tuple() | تبدیل به تاپل | tuple([1, 2]) |
set() | تبدیل به مجموعه | set([1, 1, 2]) |
مثال تبدیل رشته به عدد صحیح
age = "28"
age = int(age)
print(age)
print(type(age))خروجی:
28
<class 'int'>مثال تبدیل رشته به عدد اعشاری
price = "125.75"
price = float(price)
print(price)خروجی:
125.75مثال تبدیل عدد به رشته
product_id = 1025
product_id = str(product_id)
print(type(product_id))خروجی:
<class 'str'>آیا همه مقادیر قابل تبدیل هستند؟
خیر. تبدیل نوع داده ممکن است با خطا مواجه شود.
value = "twenty"
number = int(value)خروجی:
ValueErrorدلیل آن است که رشته "twenty" نمایش عددی قابلتبدیلی برای تابع int() نیست.
برای جلوگیری از توقف ناخواسته برنامه، میتوان خطای تبدیل را مدیریت کرد:
user_input = "twenty"
try:
number = int(user_input)
print(number)
except ValueError:
print("Please enter a valid integer.")خروجی:
Please enter a valid integer.نکته: تبدیل نوع باید بر اساس معنای داده انجام شود، نه صرفاً ظاهر آن. برای مثال، کد پستی 02145 ممکن است از ارقام تشکیل شده باشد، اما یک شناسه است و نباید مانند یک عدد معمولی با آن رفتار کرد.
۱۱. تفاوت Mutable و Immutable در Python
یکی از مفاهیم مهم در Python، تفاوت اشیای تغییرپذیر (Mutable) و تغییرناپذیر (Immutable) است.
- Mutable: شیء پس از ایجاد میتواند بدون ساخت یک شیء جدید، تغییر کند.
- Immutable: مقدار شیء پس از ایجاد قابل تغییر نیست؛ عملیات ظاهراً تغییردهنده معمولاً شیء جدیدی ایجاد میکند.
| نوع داده | وضعیت تغییرپذیری |
|---|---|
int | Immutable |
float | Immutable |
bool | Immutable |
str | Immutable |
tuple | Immutable |
list | Mutable |
dict | Mutable |
set | Mutable |
frozenset | Immutable |
مثال: تغییرپذیری List
numbers = [10, 20, 30]
numbers[0] = 100
print(numbers)خروجی:
[100, 20, 30]لیست تغییر کرده است.
مثال: تغییرناپذیری String
text = "Python"
# This operation is invalid:
# text[0] = "J"این دستور خطای TypeError ایجاد میکند؛ زیرا رشتهها تغییرناپذیر هستند.
چرا Mutable و Immutable اهمیت دارند؟
این تفاوت هنگام کار با چند متغیر که به یک شیء مشترک ارجاع میدهند اهمیت زیادی دارد.
list_a = [1, 2, 3]
list_b = list_a
list_b.append(4)
print(list_a)
print(list_b)خروجی:
[1, 2, 3, 4]
[1, 2, 3, 4]هر دو نام به یک List مشترک ارجاع میدهند؛ بنابراین تغییر آن از طریق list_b در list_a نیز قابل مشاهده است.
اگر به یک کپی مستقل نیاز دارید:
list_a = [1, 2, 3]
list_b = list_a.copy()
list_b.append(4)
print(list_a)
print(list_b)خروجی:
[1, 2, 3]
[1, 2, 3, 4]این موضوع در پردازش مجموعههای داده، توابع و پروژههای بزرگ Python اهمیت عملی دارد.
۱۲. تفاوت = و == در Python چیست؟
این دو علامت از نظر کاربرد کاملاً متفاوتاند:
=عملگر انتساب (Assignment Operator) است.==عملگر مقایسه برابری (Equality Operator) است.
مثال:
age = 25
print(age == 25)خروجی:
Trueدر خط اول مقدار ۲۵ به نام age اختصاص داده شده است. در خط دوم بررسی میشود که آیا مقدار age برابر با ۲۵ است یا خیر.
همچنین is با == تفاوت دارد:
==برابری مقدارها را بررسی میکند.isبررسی میکند که دو ارجاع به یک شیء واحد اشاره میکنند یا خیر.
برای بررسی None معمولاً باید از is None استفاده کرد.
۱۳. نقش انواع داده در تحلیل داده با Python
شناخت انواع داده فقط برای نوشتن برنامههای ساده اهمیت ندارد؛ بلکه یکی از مراحل ضروری در تحلیل داده (Data Analysis) است.
در پروژههای واقعی، دادهها ممکن است از فایلهای CSV، Excel، پایگاه داده، API یا سامانههای سازمانی دریافت شوند. نوع دادهای که هنگام ورود به برنامه ثبت میشود، همیشه با معنای واقعی آن مطابقت ندارد.
برای مثال، ممکن است ستون قیمت در یک فایل CSV بهصورت متن خوانده شود؛ درحالیکه برای محاسبه میانگین یا مجموع فروش باید عددی باشد.
مثال: مشکل نوع داده در تحلیل فروش
فرض کنید اطلاعات زیر را دریافت کردهایم:
sales = ["100", "200", "300"]
print(type(sales[0]))خروجی:
<class 'str'>این مقادیر رشته هستند. برای محاسبه مجموع فروش باید آنها را به نوع عددی تبدیل کنیم:
sales = ["100", "200", "300"]
numeric_sales = [int(value) for value in sales]
total_sales = sum(numeric_sales)
print(total_sales)خروجی:
600چرا کد پستی و شناسه نباید لزوماً عدد باشند؟
یکی از اشتباهات رایج در آمادهسازی دادهها این است که هر ستونی که شامل رقم است، به نوع عددی تبدیل شود.
اما باید بین داده عددی (Numeric Data) و شناسه (Identifier) تفاوت قائل شد.
برای مثال:
| مقدار | نوع مناسب در بسیاری از کاربردها | دلیل |
|---|---|---|
| تعداد سفارشها | عدد صحیح | قابلیت شمارش و محاسبه دارد |
| قیمت محصول | عددی | قابلیت جمع و میانگینگیری دارد |
| کد پستی | رشته | شناسه مکانی است، نه کمیت |
| شماره تلفن | رشته | نباید عملیات ریاضی روی آن انجام شود |
| کد ملی یا شناسه کاربر | رشته | برای شناسایی استفاده میشود |
| تاریخ ثبت سفارش | نوع تاریخ و زمان | باید عملیات زمانی روی آن انجام شود |
برای نمونه، تبدیل کد پستی "02145" به عدد 2145 باعث از دست رفتن صفر ابتدایی میشود. بنابراین انتخاب نوع داده باید بر اساس معنای واقعی ستون صورت گیرد.
۱۴. بررسی انواع داده در Pandas
کتابخانه Pandas یکی از ابزارهای اصلی تحلیل داده در Python است. هنگام کار با DataFrame، نوع داده هر ستون اهمیت زیادی دارد؛ زیرا بر محاسبات، فیلترکردن، ذخیرهسازی و مدیریت مقادیر گمشده اثر میگذارد.
ابتدا کتابخانه را وارد میکنیم:
import pandas as pd
data = {
"product": ["Laptop", "Mouse", "Keyboard"],
"price": [1200.50, 25.75, 45.00],
"quantity": [5, 20, 10],
"available": [True, True, False]
}
df = pd.DataFrame(data)بررسی نوع داده ستونها با dtypes
print(df.dtypes)خروجی:
product object
price float64
quantity int64
available bool
dtype: objectویژگی dtypes نوع داده هر ستون را نمایش میدهد.
بررسی اطلاعات کلی DataFrame
df.info()این دستور اطلاعاتی مانند تعداد ردیفها، تعداد ستونها، نوع داده ستونها و تعداد مقادیر غیرگمشده را نمایش میدهد.
تبدیل نوع داده با astype()
اگر نوع یک ستون مشخص باشد و تبدیل موردنظر معتبر باشد، میتوان از astype() استفاده کرد:
df["quantity"] = df["quantity"].astype("float64")برای تبدیل یک ستون متنی به عدد، در صورت معتبر بودن مقادیر، میتوان نوشت:
df["price"] = df["price"].astype(float)استفاده از pd.to_numeric()
اگر دادهها ممکن است شامل مقدارهای نامعتبر باشند، تابع pd.to_numeric() ابزار مناسبتری برای تبدیل و کنترل خطا است.
df = pd.DataFrame({
"price": ["100", "250", "invalid", "400"]
})
df["price"] = pd.to_numeric(
df["price"],
errors="coerce"
)
print(df)خروجی:
price
0 100.0
1 250.0
2 NaN
3 400.0با تنظیم errors="coerce"، مقادیر غیرقابلتبدیل به مقدار گمشده NaN تبدیل میشوند.
این روش باید با دقت استفاده شود؛ زیرا اگر داده نامعتبر ناشی از اشتباه در منبع داده باشد، تبدیل آن به مقدار گمشده میتواند اطلاعات مربوط به مشکل را پنهان کند. بهتر است تعداد و محل مقادیر نامعتبر نیز بررسی شود.
تفاوت None، NaN و pd.NA در Pandas
در تحلیل داده، مفهوم مقدار گمشده (Missing Value) اهمیت زیادی دارد.
در Python و Pandas چند نمایش رایج برای نبود مقدار وجود دارد:
None: مقدار ویژه Python برای نبود مقدار.NaN: مقدار ویژه رایج برای نمایش داده عددی ناموجود.pd.NA: نشانگر مقدار گمشده در انواع داده Nullable در Pandas.
این مقادیر از نظر نوع و رفتار یکسان نیستند. برای بررسی مقدارهای گمشده در DataFrame معمولاً از این دستور استفاده میشود:
df.isna()برای شمارش مقدارهای گمشده در هر ستون:
df.isna().sum()مستندات رسمی Pandas درباره Missing Data تفاوت این نمایشها و نحوه مدیریت آنها را توضیح میدهد.
۱۵. Type Hint در Python چیست؟
اگرچه Python برای تعریف متغیرها به اعلام نوع داده نیاز ندارد، میتوان از Type Hint یا Type Annotation برای مشخصکردن نوع مورد انتظار استفاده کرد.
مثال:
age: int = 28
name: str = "Sara"
price: float = 125.75
is_active: bool = TrueType Hint به خوانایی کد کمک میکند و ابزارهایی مانند mypy و ویرایشگرهای برنامهنویسی میتوانند از آن برای شناسایی برخی ناسازگاریهای احتمالی استفاده کنند.
اما نکته مهم این است که Type Hint بهصورت پیشفرض مقدار را در زمان اجرا تبدیل یا اعتبارسنجی نمیکند.
مثال:
age: int = "twenty"Python در حالت عادی صرفاً به دلیل این annotation الزاماً خطا ایجاد نمیکند؛ زیرا Type Hint بهتنهایی یک سیستم اعتبارسنجی اجباری در زمان اجرا نیست.
برای مطالعه بیشتر به Python Documentation – typing مراجعه کنید.
۱۶. اشتباهات رایج درباره متغیرها و انواع داده در Python
در پروژههای آموزشی و عملی، برخی خطاها بارها تکرار میشوند.
| اشتباه | علت | راهکار |
|---|---|---|
| جمع دو عدد بهصورت متن | مقادیر از نوع str هستند | بررسی و تبدیل نوع داده |
| تبدیل کد پستی به عدد | توجهنکردن به معنای داده | نگهداری شناسهها بهصورت رشته |
| استفاده از نامهای مبهم | نامگذاری ضعیف | استفاده از نامهای توصیفی |
اشتباهگرفتن None و 0 | درک نادرست مقدار گمشده | بررسی صریح None |
| تغییر ناخواسته یک List از طریق متغیر دیگر | ارجاع دو نام به یک شیء | استفاده از کپی مناسب |
| فرض اینکه Type Hint نوع را تحمیل میکند | درک نادرست annotation | اعتبارسنجی جداگانه ورودی |
| تبدیل بدون بررسی دادههای نامعتبر | استفاده نادرست از Type Casting | مدیریت خطا و بررسی مقادیر |
۱۷. یک مثال عملی: ساخت و تحلیل دادههای فروش
برای ترکیب مفاهیم این مقاله، یک مجموعه داده کوچک از سفارشهای فروش ایجاد میکنیم.
import pandas as pd
orders = {
"order_id": ["A101", "A102", "A103", "A104"],
"customer": ["Ali", "Sara", "Reza", "Mina"],
"price": ["120.50", "250.00", "invalid", "180.00"],
"quantity": [2, 1, 3, 2],
"is_paid": [True, True, False, True]
}
df = pd.DataFrame(orders)
# Convert price to numeric
df["price"] = pd.to_numeric(
df["price"],
errors="coerce"
)
# Calculate order value
df["total_value"] = df["price"] * df["quantity"]
# Inspect data types
print(df.dtypes)
# Calculate total sales
print(df["total_value"].sum())در این مثال:
order_idوcustomerاز نوع متنی هستند.priceابتدا بهصورت رشته وارد شده است.pd.to_numeric()قیمتها را به مقادیر عددی تبدیل میکند.- مقدار نامعتبر به
NaNتبدیل میشود. quantityیک مقدار عددی صحیح است.is_paidوضعیت پرداخت را با Boolean نشان میدهد.- ستون
total_valueارزش هر سفارش را محاسبه میکند.
نکته تحلیلی مهم: در این مثال، مجموع فروش بر اساس مقادیر معتبر محاسبه میشود و سفارش دارای قیمت نامعتبر در محاسبه عددی وارد نمیشود. در یک پروژه واقعی، پیش از گزارش نهایی باید تعداد سفارشهای دارای قیمت نامعتبر و اثر حذف آنها بر نتایج بررسی شود.
۱۸. جمعبندی: چرا شناخت متغیرها و انواع داده ضروری است؟
متغیرها و انواع داده پایه اصلی برنامهنویسی Python و یکی از پیشنیازهای مهم تحلیل داده هستند.
در این مقاله آموختیم که:
- متغیر نامی برای ارجاع به یک شیء است.
- هر شیء در Python دارای نوع داده مشخصی است.
- Python از Dynamic Typing استفاده میکند.
- انواع داده اصلی شامل
int،float،complex،str،boolوNoneTypeهستند. - ساختارهای
list،tuple،dictوsetبرای نگهداری مجموعه دادهها کاربرد دارند. type()وisinstance()برای بررسی نوع داده استفاده میشوند.- توابعی مانند
int()،float()وstr()برای تبدیل نوع داده به کار میروند. - تفاوت Mutable و Immutable بر نحوه مدیریت اشیا و تغییر دادهها اثر میگذارد.
- در تحلیل داده با Pandas باید نوع هر ستون بر اساس معنای واقعی آن انتخاب شود.
اصل مهم در تحلیل داده: پیش از انجام محاسبات، نوع و معنای هر متغیر را بررسی کنید. صرفاً عددیبودن ظاهر یک مقدار به این معنی نیست که باید بهعنوان داده عددی با آن رفتار شود.
در ادامه مسیر یادگیری Python، آشنایی عمیقتر با عملگرها، شرطها، حلقهها، توابع و ساختارهای داده به شما کمک میکند برنامههای کاربردیتر و قابلاعتمادتری بنویسید.
پرسشهای متداول (FAQ)
۱. متغیر در Python چیست؟
متغیر در Python نامی است که به یک شیء در حافظه ارجاع میدهد. با استفاده از متغیر میتوان به داده دسترسی داشت و آن را در بخشهای مختلف برنامه استفاده کرد.
۲. انواع داده اصلی در Python کداماند؟
انواع داده اصلی Python شامل int برای اعداد صحیح، float برای اعداد اعشاری، complex برای اعداد مختلط، str برای متن، bool برای مقادیر منطقی و NoneType برای مقدار None هستند.
۳. آیا Python یک زبان با نوعدهی پویا است؟
بله. Python از Dynamic Typing استفاده میکند. بنابراین هنگام تعریف متغیر نیازی به اعلام نوع آن نیست و یک نام میتواند در زمان اجرا به اشیایی با انواع متفاوت ارجاع دهد.
۴. چگونه نوع یک متغیر را در Python بفهمیم؟
با استفاده از تابع type() میتوان نوع دقیق شیء را بررسی کرد:
value = 25
print(type(value))برای بررسی سازگاری یک شیء با یک نوع مشخص میتوان از isinstance() استفاده کرد.
۵. تفاوت int و float چیست؟
int برای اعداد صحیح مانند 25 و 100 استفاده میشود، درحالیکه float برای اعداد دارای بخش اعشاری مانند 25.5 و 100.75 کاربرد دارد.
۶. تفاوت str و int چیست؟
str برای ذخیره متن و int برای ذخیره اعداد صحیح استفاده میشود. برای مثال، 100 یک عدد صحیح است، اما "100" یک رشته متنی است.
۷. چگونه یک رشته را به عدد تبدیل کنیم؟
برای تبدیل رشته به عدد صحیح از int() و برای تبدیل به عدد اعشاری از float() استفاده میشود:
number1 = int("100")
number2 = float("12.5")البته رشته باید قالب عددی معتبر داشته باشد.
۸. تفاوت None و False چیست؟
None نشاندهنده نبود مقدار است، اما False یک مقدار منطقی است که نشان میدهد یک شرط نادرست است. این دو از نظر نوع و مفهوم متفاوتاند.
۹. تفاوت List و Tuple چیست؟
هر دو برای نگهداری مجموعهای مرتب از مقادیر استفاده میشوند؛ اما List تغییرپذیر است و Tuple تغییرناپذیر. بنابراین List برای مجموعههایی که نیاز به تغییر دارند و Tuple برای مجموعههایی که قرار است ثابت بمانند مناسب است.
۱۰. آیا کد پستی باید از نوع int باشد؟
معمولاً خیر. کد پستی، شماره تلفن و شناسهها اغلب باید بهصورت str ذخیره شوند؛ زیرا ماهیت آنها شناسایی است، نه محاسبه ریاضی. تبدیل آنها به عدد ممکن است صفرهای ابتدایی را حذف کند.
۱۱. چگونه نوع داده ستونهای یک DataFrame را بررسی کنیم؟
در Pandas میتوان از ویژگی dtypes برای مشاهده نوع داده ستونها و از متد info() برای دریافت اطلاعات کلی DataFrame استفاده کرد.
df.dtypes
df.info()۱۲. آیا Type Hint نوع متغیر را در زمان اجرا کنترل میکند؟
خیر. Type Hint عمدتاً برای مستندسازی، خوانایی کد و کمک به ابزارهای بررسی ایستا (Static Type Checkers) استفاده میشود. برای اعتبارسنجی واقعی دادههای ورودی باید منطق جداگانه تعریف شود.
منابع و مستندات معتبر
برای یادگیری عمیقتر متغیرها و انواع داده در Python، منابع رسمی زیر پیشنهاد میشوند:
۱. Python Documentation – Built-in Types
مستندات رسمی انواع داده داخلی Python، شامل اعداد، رشتهها، Boolean و ساختارهای داده.
https://docs.python.org/3/library/stdtypes.html
۲. Python Documentation – Data Model
توضیح مفاهیم Object، Type، Identity و مدل داده در Python.
https://docs.python.org/3/reference/datamodel.html
۳. Python Tutorial – Data Structures
راهنمای رسمی ساختارهای داده مانند List، Tuple و Dictionary.
https://docs.python.org/3/tutorial/datastructures.html
۴. Python Documentation – typing
مستندات رسمی Type Hint و Type Annotation.
https://docs.python.org/3/library/typing.html
۵. PEP 8 – Style Guide for Python Code
راهنمای استاندارد نامگذاری متغیرها و سبک نوشتن کد Python.
https://peps.python.org/pep-0008/
۶. Pandas Documentation – Essential Basic Functionality
راهنمای کار با DataFrame و قابلیتهای پایه Pandas.
https://pandas.pydata.org/docs/user_guide/basics.html
۷. Pandas Documentation – Working with Missing Data
راهنمای مدیریت مقادیر گمشده و تفاوت None، NaN و pd.NA.
https://pandas.pydata.org/docs/user_guide/missing_data.html
۸. Pandas API – to_numeric()
مستندات تبدیل دادهها به نوع عددی و مدیریت مقادیر غیرقابلتبدیل.
https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html

