Pandas & NumPy Academy · पाठ

astype() से प्रकार बदलना

astype() का उपयोग करके कॉलमों को int, float, string, boolean और datetime में बदलें तथा सामान्य रूपांतरण त्रुटियों को संभालें।

पाठ 2, कुल 4 में से13 चरण

astype() से प्रकार बदलना, CoddyKit पर Pandas & NumPy Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Pandas & NumPy Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

astype() का परिचय

Series.astype(dtype) किसी कॉलम को उसके वर्तमान प्रकार से आपके द्वारा निर्दिष्ट प्रकार में बदलता है। यह मूल को बदले बिना एक नया Series (या पूरे DataFrame पर चलाने पर DataFrame) लौटाता है। डेटा लोड करने के बाद dtype की समस्याएँ ठीक करने के लिए यह Pandas का मुख्य उपकरण है और यह संख्यात्मक प्रकारों, स्ट्रिंग, बूलियन तथा Categorical प्रकार के बीच रूपांतरण कर सकता है।

import pandas as pd

df = pd.DataFrame({'age': ['25', '30', '35']})
print('Before:', df['age'].dtype)  # object

df['age'] = df['age'].astype(int)
print('After:', df['age'].dtype)   # int64
print(df['age'] + 1)               # [26, 31, 36] — arithmetic now works

संख्यात्मक प्रकारों में रूपांतरण

सबसे सामान्य रूपांतरण object से संख्यात्मक प्रकार में होता है। आप 'int64', 'int32', 'float64', 'float32' आदि में बदल सकते हैं। यदि कॉलम का कोई मान परिवर्तित नहीं किया जा सकता, तो astype() एक ValueError उत्पन्न करता है। जब कॉलम में गैर-संख्यात्मक स्ट्रिंग हो सकती हैं, तब pd.to_numeric(series, errors='coerce') का उपयोग करें — यह विफल होने के बजाय गलत मानों को NaN में बदल देता है।

import pandas as pd

df = pd.DataFrame({'price': ['10.5', '20.0', 'N/A', '30.5']})

# astype would crash on 'N/A'
# price_float = df['price'].astype(float)  # ValueError!

# pd.to_numeric with errors='coerce' is safer
df['price_float'] = pd.to_numeric(df['price'], errors='coerce')
print(df)
#   price  price_float
# 0  10.5         10.5
# 1  20.0         20.0
# 2   N/A          NaN
# 3  30.5         30.5

स्ट्रिंग (object) में रूपांतरण

किसी कॉलम को str (या 'object') में बदलने पर प्रत्येक मान अपने स्ट्रिंग रूप में बदल जाता है। यह तब उपयोगी है जब आपको किसी संख्यात्मक कॉलम को टेक्स्ट कॉलम के साथ जोड़ना हो या संख्यात्मक डेटा, जैसे शून्य जोड़कर बनाए गए ID, पर स्ट्रिंग विधियाँ लागू करनी हों। Pandas में नया 'string' dtype भी है, जो टेक्स्ट कॉलम के लिए बेहतर NA प्रबंधन प्रदान करता है।

import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3], 'region': ['E', 'W', 'N']})

# Concatenate id and region into a composite key
df['key'] = df['id'].astype(str) + '_' + df['region']
print(df)
#    id region  key
# 0   1      E  1_E
# 1   2      W  2_W
# 2   3      N  3_N

बूलियन में रूपांतरण

जब कॉलम True/False को पूर्णांक (0/1) या स्ट्रिंग ('Yes'/'No') के रूप में संग्रहीत करते हैं, तब बूलियन रूपांतरण उपयोगी होता है। astype(bool) से 0/1 पूर्णांकों को बदलना सीधे काम करता है: 0, False बन जाता है और शून्य के अलावा कोई भी मान True बन जाता है। 'Yes'/'No' वाले स्ट्रिंग कॉलम के लिए पहले शब्दकोश की सहायता से map करें, फिर प्रकार बदलें।

import pandas as pd

df = pd.DataFrame({
    'active_int': [1, 0, 1, 0],
    'active_str': ['Yes', 'No', 'Yes', 'No']
})

# Integer to bool
df['active_bool'] = df['active_int'].astype(bool)

# String to bool via mapping
df['active_bool2'] = df['active_str'].map({'Yes': True, 'No': False})

print(df[['active_bool', 'active_bool2']])
#    active_bool  active_bool2
# 0         True          True
# 1        False         False

संख्यात्मक प्रकारों को छोटे प्रकार में बदलना

डिफ़ॉल्ट रूप से Pandas 64-बिट प्रकारों का उपयोग करता है। यदि आपके पूर्णांक मान 32 या यहाँ तक कि 8 बिट में समा जाते हैं, तो मेमोरी उपयोग को आधा (या चौथाई) करने के लिए आप उन्हें छोटे प्रकार में बदल सकते हैं। pd.to_numeric(series, downcast='integer') का उपयोग करें या astype('int32') से स्पष्ट रूप से प्रकार बदलें। बड़े डेटासेट के लिए यह एक महत्वपूर्ण अनुकूलन है।

import pandas as pd
import numpy as np

df = pd.DataFrame({'count': np.random.randint(0, 200, 1_000_000)})

print('int64 bytes:', df['count'].nbytes)   # 8,000,000

df['count_int16'] = df['count'].astype('int16')  # max 32767, fits 0-200
print('int16 bytes:', df['count_int16'].nbytes)  # 2,000,000

# Or let Pandas choose the smallest type automatically
df['count_auto'] = pd.to_numeric(df['count'], downcast='integer')
print('auto dtype:', df['count_auto'].dtype)

astype(dict) से पूरे DataFrames का रूपांतरण

आप df.astype() को एक शब्दकोश देकर एक साथ कई कॉलम बदल सकते हैं, जिसमें कुंजियाँ कॉलम के नाम और मान लक्ष्य dtypes होते हैं। यह अलग-अलग कॉलम असाइनमेंट को एक के बाद एक लिखने की तुलना में अधिक स्पष्ट है और आपकी पाइपलाइन में प्रकार-रूपांतरण के चरण को एक ही स्व-व्याख्यात्मक ब्लॉक के रूप में प्रस्तुत करता है।

import pandas as pd

df = pd.DataFrame({
    'age': ['25', '30'],
    'salary': ['50000', '70000'],
    'is_manager': ['1', '0']
})

df = df.astype({
    'age': 'int32',
    'salary': 'float64',
    'is_manager': 'bool'
})
print(df.dtypes)
# age           int32
# salary      float64
# is_manager     bool

astype() में त्रुटियों का प्रबंधन

astype() में pd.to_numeric के विपरीत, त्रुटि-सहने वाला अंतर्निहित मोड नहीं है। रूपांतरण विफल होने पर यह ValueError या OverflowError उत्पन्न करता है। सुरक्षित कार्यप्रवाह यह है: (1) पहले कॉलम को साफ़ करें (चिह्न हटाएँ, NaN भरें), (2) फिर प्रकार बदलें। वैकल्पिक रूप से, संख्यात्मक मानों के लिए pd.to_numeric(errors='coerce') का उपयोग करें या एक छोटा सहायक फ़ंक्शन लिखें जो रूपांतरण की त्रुटियों को पकड़ सके।

import pandas as pd

# Clean then cast pattern
df = pd.DataFrame({'price': ['$1,200', '$800', '$450']})

# Step 1: remove non-numeric characters
df['price_clean'] = (
    df['price']
    .str.replace('$', '', regex=False)
    .str.replace(',', '', regex=False)
)
# Step 2: safe cast
df['price_num'] = df['price_clean'].astype(float)
print(df)
#      price price_clean  price_num
# 0  $1,200        1200     1200.0
# 1    $800         800      800.0
# 2    $450         450      450.0

Pandas StringDtype में रूपांतरण

नया 'string' dtype (बड़े S वाला रूप या pd.StringDtype()) उचित NA प्रबंधन के साथ प्रथम-श्रेणी स्ट्रिंग समर्थन देने के लिए प्रस्तुत किया गया था — यह गायब स्ट्रिंग को None या np.nan के बजाय pd.NA के रूप में संग्रहीत करता है। यह .str एक्सेसर को सक्षम करता है और object dtype की तुलना में NA के अर्थ को बेहतर ढंग से बनाए रखता है। Pandas 2+ को लक्षित करने वाले नए कोड के लिए इसकी अनुशंसा की जाती है।

import pandas as pd

df = pd.DataFrame({'name': ['Alice', None, 'Carol']})

# Convert to the modern string dtype
df['name'] = df['name'].astype('string')
print(df['name'].dtype)   # string
print(df['name'].isna())  # proper NA detection
# 0    False
# 1     True
# 2    False

छोटे प्रकार में बदलते समय overflow का जोखिम

जब आप किसी मान को छोटे पूर्णांक प्रकार में बदलते हैं, तो उस प्रकार की सीमा से बाहर के मान बिना किसी सूचना के overflow होकर चक्राकार बदल जाते हैं। उदाहरण के लिए, 300 को int8 (सीमा -128 से 127) में बदलने पर error उत्पन्न किए बिना 44 प्राप्त होता है। सूक्ष्म डेटा-क्षति से बचने के लिए छोटे प्रकार में बदलने से पहले हमेशा जाँच लें कि आपके वास्तविक डेटा की सीमा लक्ष्य प्रकार में समा सकती है।

import pandas as pd
import numpy as np

df = pd.DataFrame({'value': [100, 200, 300, 127, 128]})

# int8 range: -128 to 127
df['value_i8'] = df['value'].astype('int8')
print(df)
#    value  value_i8
# 0    100       100
# 1    200       -56   <- overflow! 200-256 = -56
# 2    300        44   <- overflow! 300-256 = 44
# 3    127       127
# 4    128      -128   <- overflow!

# Always check range first
print(df['value'].max())  # 300 > 127 — int8 is UNSAFE here

Dtype Map से रूपांतरणों का सत्यापन

कई प्रकार-रूपांतरण करने के बाद वास्तविक dtypes की अपेक्षित map से तुलना करके अंतिम स्कीमा का सत्यापन करें। यह assertion पैटर्न ऐसी गलतियों को पकड़ता है, जैसे कोई कॉलम परिवर्तित न हो पाना (उदाहरण के लिए, NaN के कारण पूर्णांक में रूपांतरण रुक जाना)। इन जाँचों को अपने डेटा लोड करने वाले फ़ंक्शन के अंत में हल्की स्कीमा जाँच के रूप में चलाएँ।

import pandas as pd

df = pd.DataFrame({
    'user_id': [1, 2, 3],
    'amount': [10.5, 20.0, 30.5],
    'active': [True, False, True]
})

expected = {'user_id': 'int64', 'amount': 'float64', 'active': 'bool'}

for col, dtype in expected.items():
    assert str(df[col].dtype) == dtype, (
        f'{col}: expected {dtype}, got {df[col].dtype}'
    )
print('Schema validation passed')

पूरी रूपांतरण पाइपलाइन का उदाहरण

अब सबको एक साथ देखें: यहाँ read_csv के बाद चलने वाली एक वास्तविक रूपांतरण पाइपलाइन है, जो फ़ॉर्मैटिंग साफ़ करती है, NaN को सुरक्षित रूप से संभालती है, सर्वोत्तम प्रकारों में बदलती है और परिणाम का सत्यापन करती है। यह पैटर्न — साफ़ करें, प्रकार बदलें, सत्यापित करें — प्रत्येक डेटा ग्रहण फ़ंक्शन का मानक हिस्सा होना चाहिए।

import pandas as pd

raw = pd.DataFrame({
    'user_id': ['101', '102', '103'],
    'revenue': ['$1,200', '$800', '$2,500'],
    'active': ['Yes', 'No', 'Yes']
})

df = (
    raw
    .assign(
        user_id=raw['user_id'].astype('int32'),
        revenue=pd.to_numeric(
            raw['revenue'].str.replace('[$,]', '', regex=True)
        ),
        active=raw['active'].map({'Yes': True, 'No': False})
    )
)
print(df.dtypes)
# user_id      int32
# revenue    float64
# active        bool

त्वरित जाँच

astype() से प्रकार बदलने की अपनी समझ को परखें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: astype(dtype) किसी कॉलम या पूरे DataFrame को नए प्रकार में बदलता है, pd.to_numeric(errors='coerce') गैर-संख्यात्मक स्ट्रिंग वाले कॉलम के लिए अधिक सुरक्षित है, और astype() को शब्दकोश देने पर एक साथ कई कॉलम बदले जा सकते हैं। overflow से बचने के लिए छोटे प्रकार में सावधानी से बदलें और assertions से हमेशा अंतिम स्कीमा का सत्यापन करें। आगे हम मेमोरी-कुशल Categorical dtype का अध्ययन करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “astype() से प्रकार बदलना” पाठ निःशुल्क है?

हाँ—“astype() से प्रकार बदलना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Pandas & NumPy Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“astype() से प्रकार बदलना” में मैं क्या सीखूँगा?

astype() का उपयोग करके कॉलमों को int, float, string, boolean और datetime में बदलें तथा सामान्य रूपांतरण त्रुटियों को संभालें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Pandas & NumPy Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Pandas & NumPy Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Pandas & NumPy Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“astype() से प्रकार बदलना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Pandas & NumPy Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Pandas & NumPy Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. कॉलम के डेटा प्रकारों की जाँच
  2. astype() से प्रकार बदलना
  3. श्रेणीबद्ध डेटा प्रकार
  4. तिथियों को सही ढंग से पार्स करना
← Pandas & NumPy Academy पर वापस जाएँ