পান্ডাসে কলামের ডেটা ধরণের পরিবর্তন করুন


803

তালিকার তালিকা হিসাবে উপস্থাপন করা একটি টেবিলকে আমি একটিতে রূপান্তর করতে চাই Pandas DataFrame। একটি অত্যন্ত সরল উদাহরণ হিসাবে:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)

এই ক্ষেত্রে কলাম 2 এবং 3 টি ফ্লোটে রূপান্তর করার উপযুক্ত উপায় কী? ডেটা ফ্রেমে রূপান্তর করার সময় প্রকারগুলি নির্দিষ্ট করার কোনও উপায় আছে কি? অথবা প্রতিটি কলামের ধরন পরিবর্তন করতে প্রথমে ডেটা ফ্রেম তৈরি করা এবং তারপরে কলামগুলি দিয়ে লুপ করা ভাল? আদর্শভাবে আমি এটি একটি গতিশীল উপায়ে করতে চাই কারণ এখানে শত শত কলাম থাকতে পারে এবং কোন ধরণের কলামগুলি হুবহু তা নির্দিষ্ট করতে চাই না। আমি কেবল গ্যারান্টি দিতে পারি যে প্রতিটি কলামে একই ধরণের মান রয়েছে।


আমি প্রতিটি কলামে রূপান্তর করার জন্য পদ্ধতিগুলি দেখেছি এবং বিশেষত নামযুক্ত কলামগুলিকে রূপান্তর করতে পন্থা দেখেছি, তবে আপনি যখন একবারে রূপান্তর করতে চান এমন 100 টি কলাম তালিকাভুক্ত করতে পারবেন না এমন নির্দিষ্ট কলামগুলি কীভাবে একটি নির্দিষ্ট শর্ত পূরণ করে? আমি সমস্ত ফ্লোট 64 -> ফ্লোট 32 বা অন্যান্য মেমরির সংরক্ষণের কৌশলগুলির উদাহরণ হিসাবে চিন্তা করছি thinking
ডেমোঙ্গোলেম

@ ডেমোঙ্গোলেম: আপনি সংখ্যার df.apply(pd.to_numeric, downcast="integer", errors="ignore")সবচেয়ে ছোট (পূর্ণসংখ্যার) টাইপটিতে পূর্ণসংখ্যা কলামগুলি ডাউনকাস্ট করার মতো কিছু করতে পারেন যা মানগুলি ধারণ করবে।
অ্যালেক্স রিলে

উত্তর:


1188

পান্ডায় ধরণের রূপান্তর করার জন্য আপনার কাছে তিনটি প্রধান বিকল্প রয়েছে:

  1. to_numeric()- অ-সংখ্যাগত প্রকারের (যেমন স্ট্রিংগুলি) একটি উপযুক্ত সংখ্যার প্রকারে নিরাপদে রূপান্তর করতে কার্যকারিতা সরবরাহ করে। (আরও দেখুন to_datetime()এবং to_timedelta()।)

  2. astype()- (প্রায়) যে কোনও প্রকারকে (প্রায়) অন্য কোনও প্রকারে রূপান্তর করুন (এটি করার জন্য এটি বোধগম্য না হলেও)। এছাড়াও আপনাকে শ্রেণিবদ্ধ ধরণের রূপান্তর করতে দেয় (খুব দরকারী)।

  3. infer_objects() - পাইথন অবজেক্ট ধারণকারী অবজেক্ট কলামগুলি যদি সম্ভব হয় একটি পান্ডাস প্রকারে রূপান্তর করার জন্য একটি ইউটিলিটি পদ্ধতি।

এই প্রতিটি পদ্ধতির আরও বিস্তারিত ব্যাখ্যা এবং ব্যবহারের জন্য পড়ুন Read


1। to_numeric()

ডেটাফ্রেমের এক বা একাধিক কলামকে সংখ্যার মানগুলিতে রূপান্তর করার সর্বোত্তম উপায় হ'ল ব্যবহার করা pandas.to_numeric()

এই ফাংশনটি সংখ্যাসূচক অবজেক্টগুলিকে (যেমন স্ট্রিংগুলি) যথাযথ হিসাবে পূর্ণসংখ্যার বা ভাসমান পয়েন্ট সংখ্যাগুলিতে পরিবর্তন করার চেষ্টা করবে।

বেসিক ব্যবহার

ইনপুটটি to_numeric()হ'ল সিরিজ বা ডেটাফ্রেমের একক কলাম।

>>> s = pd.Series(["8", 6, "7.5", 3, "0.9"]) # mixed string and numeric values
>>> s
0      8
1      6
2    7.5
3      3
4    0.9
dtype: object

>>> pd.to_numeric(s) # convert everything to float values
0    8.0
1    6.0
2    7.5
3    3.0
4    0.9
dtype: float64

আপনি দেখতে পাচ্ছেন, একটি নতুন সিরিজ ফিরে এসেছে। এটি ব্যবহার চালিয়ে যাওয়ার জন্য এই আউটপুটটিকে ভেরিয়েবল বা কলামের নাম নির্ধারণ করতে ভুলবেন না:

# convert Series
my_series = pd.to_numeric(my_series)

# convert column "a" of a DataFrame
df["a"] = pd.to_numeric(df["a"])

আপনি apply()পদ্ধতির মাধ্যমে ডেটা ফ্রেমের একাধিক কলাম রূপান্তর করতেও এটি ব্যবহার করতে পারেন :

# convert all columns of DataFrame
df = df.apply(pd.to_numeric) # convert all columns of DataFrame

# convert just columns "a" and "b"
df[["a", "b"]] = df[["a", "b"]].apply(pd.to_numeric)

যতক্ষণ আপনার মানগুলি রূপান্তর করা যায় ততক্ষণ আপনার সম্ভবত প্রয়োজন।

ত্রুটি পরিচালনা

তবে কী যদি কিছু মানকে একটি সংখ্যার ধরণের রূপান্তর করা যায় না?

to_numeric()এমন errorsকীওয়ার্ড আর্গুমেন্টও গ্রহণ করে যা আপনাকে অ-সংখ্যাসূচক মানগুলিকে বাধ্য করতে NaNবা এই মানগুলি সহ কলামগুলি উপেক্ষা করার অনুমতি দেয় ।

এখানে স্ট্রিংগুলির সিরিজ ব্যবহার করে একটি উদাহরণ দেওয়া sহয়েছে যার মধ্যে ডাইটিপ অবজেক্ট রয়েছে:

>>> s = pd.Series(['1', '2', '4.7', 'pandas', '10'])
>>> s
0         1
1         2
2       4.7
3    pandas
4        10
dtype: object

ডিফল্ট আচরণটি হ'ল যদি এটি কোনও মান রূপান্তর করতে না পারে। এই ক্ষেত্রে, এটি 'প্যান্ডাস' স্ট্রিংয়ের সাথে মোকাবেলা করতে পারে না:

>>> pd.to_numeric(s) # or pd.to_numeric(s, errors='raise')
ValueError: Unable to parse string

ব্যর্থ হওয়ার পরিবর্তে আমরা 'পান্ডাস' কে অনুপস্থিত / খারাপ সংখ্যার মান হিসাবে বিবেচনা করতে চাই। NaNমূল errorsশব্দটি যুক্তি ব্যবহার করে আমরা অবৈধ মানগুলিকে নিম্নরূপে বাধ্য করতে পারি :

>>> pd.to_numeric(s, errors='coerce')
0     1.0
1     2.0
2     4.7
3     NaN
4    10.0
dtype: float64

এর জন্য তৃতীয় বিকল্পটি errorsহ'ল অপারেশনটিকে অগ্রাহ্য করা যদি কোনও অবৈধ মান সম্মুখীন হয়:

>>> pd.to_numeric(s, errors='ignore')
# the original Series is returned untouched

আপনি যখন আপনার পুরো ডেটা ফ্রেমে রূপান্তর করতে চান তবে এই শেষ বিকল্পটি বিশেষভাবে কার্যকর তবে আমাদের কলামগুলির মধ্যে কোনটি নির্ভরযোগ্যভাবে একটি সংখ্যার ধরণের রূপান্তর করতে পারে তা জানেন না। সেক্ষেত্রে কেবল লিখুন:

df.apply(pd.to_numeric, errors='ignore')

ফাংশনটি ডেটা ফ্রেমের প্রতিটি কলামে প্রয়োগ করা হবে। একটি সংখ্যার ধরণের রূপান্তরিত করা যায় এমন কলামগুলি রূপান্তরিত হবে, যখন কলামগুলি (যেমন তাদের অ-অঙ্কের স্ট্রিং বা তারিখ রয়েছে) একা থাকবে।

Downcasting

ডিফল্টরূপে, এর সাথে রূপান্তর to_numeric()আপনাকে একটি int64বা float64dtype দেয় (বা যে কোনও সংখ্যার প্রস্থই আপনার প্ল্যাটফর্মের স্থানীয় হয়)।

যে সাধারণত কি আপনি চান, কিন্তু আপনি যদি কিছু স্মৃতি সংরক্ষণ এবং একটি আরো কম্প্যাক্ট dtype মত ব্যবহার করতে চেয়েছিলেন float32, বা int8?

to_numeric()আপনাকে 'পূর্ণসংখ্যা', 'স্বাক্ষরিত', 'স্বাক্ষরবিহীন', 'ভাসা' উভয়টিতে ডাউনকাস্ট করার বিকল্প দেয়। একটি sপূর্ণসংখ্যার ধরণের সহজ সিরিজের উদাহরণ এখানে :

>>> s = pd.Series([1, 2, -7])
>>> s
0    1
1    2
2   -7
dtype: int64

'পূর্ণসংখ্যায়' ডাউনসকাস্টিং সবচেয়ে ছোট সম্ভাব্য পূর্ণসংখ্যাকে ব্যবহার করে যা মানগুলি ধরে রাখতে পারে:

>>> pd.to_numeric(s, downcast='integer')
0    1
1    2
2   -7
dtype: int8

'ফ্লোটে' ডাউন কাস্টিং একইভাবে সাধারণ ভাসমান ধরণের চেয়ে ছোটটিকে বেছে নেয়:

>>> pd.to_numeric(s, downcast='float')
0    1.0
1    2.0
2   -7.0
dtype: float32

2। astype()

astype()পদ্ধতি dtype আপনি আপনার DataFrame বা সিরিজ করতে চান সম্পর্কে স্পষ্ট হতে সক্ষম করে। এটি খুব বহুমুখী যাতে আপনি চেষ্টা করতে পারেন এবং এক ধরণের থেকে অন্য প্রকারে যেতে পারেন।

বেসিক ব্যবহার

কেবল একটি প্রকার বাছাই করুন: আপনি একটি NumPy dtype (উদাঃ np.int16), কিছু পাইথন প্রকার (যেমন bool), বা পান্ডাস-নির্দিষ্ট প্রকার (শ্রেণীবদ্ধ dtype এর মতো) ব্যবহার করতে পারেন।

আপনি যে astype()বিষয়টিকে রূপান্তর করতে চান তার পদ্ধতিটি কল করুন এবং এটি আপনার জন্য চেষ্টা করে রূপান্তর করবেন:

# convert all DataFrame columns to the int64 dtype
df = df.astype(int)

# convert column "a" to int64 dtype and "b" to complex type
df = df.astype({"a": int, "b": complex})

# convert Series to float16 type
s = s.astype(np.float16)

# convert Series to Python strings
s = s.astype(str)

# convert Series to categorical type - see docs for more details
s = s.astype('category')

লক্ষ্য করুন আমি বলেছি "চেষ্টা" - যদি astype()সিরিজ বা ডেটাফ্রেমে কোনও মান রূপান্তর করতে না জানা থাকে তবে এটি ত্রুটি বাড়িয়ে তুলবে। উদাহরণস্বরূপ আপনার যদি মান NaNবা infমান থাকে তবে আপনি এটি একটি পূর্ণসংখ্যার সাথে রূপান্তর করার চেষ্টা করে একটি ত্রুটি পাবেন।

পান্ডাস 0.20.0 হিসাবে, এই ত্রুটিটি পাস করে দমন করা যায় errors='ignore'। আপনার আসল অবজেক্টটি নিঃসন্দেহে ফিরে আসবে।

সাবধান হও

astype()শক্তিশালী, তবে এটি কখনও কখনও মানগুলিকে "ভুলভাবে" রূপান্তরিত করে। উদাহরণ স্বরূপ:

>>> s = pd.Series([1, 2, -7])
>>> s
0    1
1    2
2   -7
dtype: int64

এগুলি ছোট ছোট পূর্ণসংখ্যা, তাই মেমরি বাঁচাতে স্বাক্ষরিত 8-বিট টাইপের রূপান্তর কীভাবে?

>>> s.astype(np.uint8)
0      1
1      2
2    249
dtype: uint8

রূপান্তরটি কাজ করেছে, তবে -7টি 249 হয়ে গেছে (অর্থাৎ 2 8 - 7)!

pd.to_numeric(s, downcast='unsigned')পরিবর্তে ব্যবহার করে ডাউন কাস্ট করার চেষ্টা করা এই ত্রুটি প্রতিরোধ করতে সহায়তা করতে পারে।


3। infer_objects()

পান্ডার সংস্করণ 0.21.0 infer_objects()একটি ডেটাফ্রেমের কলামগুলিকে রূপান্তর করার পদ্ধতিটি চালু করেছে যার মধ্যে একটি নির্দিষ্ট ধরণের (সফ্ট রূপান্তর) তে একটি অবজেক্ট ডাটাটাইপ রয়েছে।

উদাহরণস্বরূপ, এখানে অবজেক্ট টাইপের দুটি কলাম সহ একটি ডেটা ফ্রেম রয়েছে। একটিতে প্রকৃত পূর্ণসংখ্যা থাকে এবং অন্যটির কাছে পূর্ণসংখ্যার প্রতিনিধিত্ব করে স্ট্রিং থাকে:

>>> df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype='object')
>>> df.dtypes
a    object
b    object
dtype: object

ব্যবহার করে infer_objects(), আপনি কলাম 'এ' প্রকারটি int64 এ পরিবর্তন করতে পারেন:

>>> df = df.infer_objects()
>>> df.dtypes
a     int64
b    object
dtype: object

কলাম 'বি' একাকী রেখে গেছে কারণ এর মানগুলি পূর্ণসংখ্যা নয়, স্ট্রিং ছিল। আপনি যদি উভয় কলামকে একটি পূর্ণসংখ্যার ধরণের রূপান্তর করতে চেষ্টা করতে এবং বাধ্য করতে চান, আপনি df.astype(int)পরিবর্তে ব্যবহার করতে পারেন ।


8
এছাড়াও .স্টাইপ (ফ্লোট) এর বিপরীতে, এটি ত্রুটি বাড়ানোর পরিবর্তে স্ট্রিংগুলিকে NaN তে রূপান্তরিত করবে
রব

11
.convert_objectsপরিবর্তে 0.17ব্যবহৃত হয়েছে - এর df.to_numericপরিবর্তে ব্যবহার করুন
ম্যাটি

4
ধন্যবাদ - আমার এই উত্তরটি আপডেট করা উচিত। এটি সম্ভবত লক্ষ্য করার মতো pd.to_numericএবং এর সহকারী পদ্ধতিগুলি কেবল একবারে একটি কলামে বিপরীত থেকে কাজ করবে convert_objects। এপিআইতে একটি প্রতিস্থাপন ফাংশন সম্পর্কে আলোচনা চলমান বলে মনে হয় ; আমি আশা করি যে একটি পদ্ধতি যা পুরো ডেটা ফ্রেম জুড়ে কাজ করে তা থেকে যাবে কারণ এটি খুব দরকারী।
অ্যালেক্স রেলি

সবচেয়ে ভালো উপায় আপনি, সব কলাম যে বর্তমানে হয়, বলে রূপান্তর কী int64করতে int32?
রয়েলটিস

4
@ রয়্যালটিস: সম্ভবত সবচেয়ে ভাল ব্যবহার করা astype(অন্য উত্তরের মতো), যেমন .astype(numpy.int32)
অ্যালেক্স রিলি

447

এ কেমন?

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df
Out[16]: 
  one  two three
0   a  1.2   4.2
1   b   70  0.03
2   x    5     0

df.dtypes
Out[17]: 
one      object
two      object
three    object

df[['two', 'three']] = df[['two', 'three']].astype(float)

df.dtypes
Out[19]: 
one       object
two      float64
three    float64

10
হ্যাঁ! pd.DataFrameএকটি dtypeযুক্তি রয়েছে যা আপনাকে ডাব্লু / আপনি খুঁজছেন হতে পারে। df = pd.DataFrame (a, কলামগুলি = ['এক', 'দুই', 'তিন'], dtype = ফ্লোট) ইন [2]: df.dtypes আউট [2]: একটি অবজেক্ট দুটি ফ্লোট 64 তিন ফ্লোট 64 ডিটি টাইপ: অবজেক্ট
হারনেসবারবার

17
আমি প্রস্তাবিত হিসাবে চেষ্টা করার পরে, আমি একটি সতর্কতা পেতে SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_index,col_indexer] = value instead। এটি প্যান্ডাসের একটি নতুন সংস্করণে প্রবর্তিত হতে পারে এবং ফলস্বরূপ আমি কোনও ভুল দেখতে পাচ্ছি না, তবে আমি এই বিস্ময়টি সম্পর্কে কি আশ্চর্য হয়েছি। কোন ধারণা?
কমলা

2
@ অ্যারেঞ্জ হ'ল সতর্কতা হ'ল ব্যবহারকারীদের শৃঙ্খলিত ক্রিয়াকলাপগুলির সাথে এবং পান্ডার সাথে ডেটাফ্রেমগুলি সম্পাদনা করার পরিবর্তে অনুলিপিপূর্ণ আচরণের বিষয়ে সতর্ক করা। দেখতে stackoverflow.com/questions/20625582/... এবং সম্পর্কিত।
ওয়ান

19
এটি একটি ভাল পদ্ধতি, তবে কোনও কলামে NaN থাকা অবস্থায় এটি কাজ করে না। ভাসা অবধি যখন ValueError: Cannot convert NA to integer
ন্যাশনাল এনএএন

7
@ গিলবেটস হ্যাঁ, একটি অভিধানে। df = pd.DataFrame(a, columns=['one', 'two', 'three'], dtype={'one': str, 'two': int, 'three': float})। যদিও স্বীকৃত "dtype" মানগুলির স্পেসিফিকেশন খুঁজে পেতে আমার বেশ কষ্ট হচ্ছে having একটি তালিকা দুর্দান্ত হবে (বর্তমানে আমি করি dict(enumerate(my_list)))।
ফিচফোল

39

এই নীচের কোডটি কলামের ডেটাটাইপ পরিবর্তন করবে।

df[['col.name1', 'col.name2'...]] = df[['col.name1', 'col.name2'..]].astype('data_type')

ডেটা টাইপের জায়গায় আপনি নিজের ডাটাটাইপ দিতে পারেন .আপনি আরআরটি, ফ্লোট, ইনট ইত্যাদি কী চান?


মনে রাখবেন যে ডেটা টাইপ ব্যবহার করে `` `'সত্য'` `` এবং `` `'মিথ্যা'` `containing স্ট্রিংগুলি যুক্ত কলামে এটি প্রয়োগ করার সময় bool, সমস্ত কিছুতে পরিবর্তিত হয় True
এইচ। ভব্রি

এই বিকল্পটি আপনার কাছে "বিভাগে" লিখুন রূপান্তর করতে পারেন
Neves

17

যখন আমার কেবল নির্দিষ্ট কলামগুলি নির্দিষ্ট করার দরকার পড়ে এবং আমি স্পষ্ট করে বলতে চাই, আমি ব্যবহার করেছি (প্রতি ডকস লোকেশন ):

dataframe = dataframe.astype({'col_name_1':'int','col_name_2':'float64', etc. ...})

সুতরাং, আসল প্রশ্নটি ব্যবহার করে তবে এটিতে কলামের নাম সরবরাহ করা হচ্ছে ...

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col_name_1', 'col_name_2', 'col_name_3'])
df = df.astype({'col_name_2':'float64', 'col_name_3':'float64'})

15

এখানে এমন একটি ফাংশন রয়েছে যা তার আর্গুমেন্টগুলিকে একটি ডেটা ফ্রেম এবং কলামগুলির একটি তালিকা হিসাবে গ্রহণ করে এবং কলামগুলির সমস্ত ডেটা সংখ্যায় নিয়ে যায়।

# df is the DataFrame, and column_list is a list of columns as strings (e.g ["col1","col2","col3"])
# dependencies: pandas

def coerce_df_columns_to_numeric(df, column_list):
    df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

সুতরাং, আপনার উদাহরণের জন্য:

import pandas as pd

def coerce_df_columns_to_numeric(df, column_list):
    df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col1','col2','col3'])

coerce_df_columns_to_numeric(df, ['col2','col3'])

আপনি কি কলাম নামের পরিবর্তে কলাম সূচী ব্যবহার করতে চান?
jvalenti

8

কীভাবে দুটি কলামের জন্য আলাদা আলাদা ডেটা টাইপ করে দুটি ডাটাফ্রেম তৈরি করা যায় এবং তারপরে সেগুলি সংযোজন করা যায়?

d1 = pd.DataFrame(columns=[ 'float_column' ], dtype=float)
d1 = d1.append(pd.DataFrame(columns=[ 'string_column' ], dtype=str))

ফলাফল

In[8}:  d1.dtypes
Out[8]: 
float_column     float64
string_column     object
dtype: object

ডেটাফ্রেম তৈরি হওয়ার পরে, আপনি এটিকে প্রথম কলামে ভাসমান পয়েন্ট ভেরিয়েবল এবং দ্বিতীয় কলামে স্ট্রিংগুলি (বা আপনার যে কোনও ডেটা টাইপ করতে চান) দিয়ে পপুলেট করতে পারেন।


4

প্যান্ডাস> = 1.0

এখানে একটি চার্ট রয়েছে যা পান্ডার মধ্যে কয়েকটি গুরুত্বপূর্ণ রূপান্তরগুলির সংক্ষিপ্তসার করে।

এখানে চিত্র বর্ণনা লিখুন

স্ট্রিংয়ে রূপান্তরগুলি তুচ্ছ .astype(str)এবং চিত্রটিতে প্রদর্শিত হয় না।

"হার্ড" বনাম "নরম" রূপান্তর

নোট করুন যে এই প্রসঙ্গে "রূপান্তরগুলি" হয় টেক্সট ডেটাগুলিকে তাদের প্রকৃত ডেটা টাইপের (হার্ড রূপান্তর) রূপান্তরিত করতে বা বস্তুর কলামগুলিতে ডেটা (নরম রূপান্তর) এর জন্য আরও উপযুক্ত ডেটা ধরণের অনুমিতকরণকে বোঝাতে পারে। পার্থক্যটি বর্ণনা করার জন্য, একবার দেখুন

df = pd.DataFrame({'a': ['1', '2', '3'], 'b': [4, 5, 6]}, dtype=object)
df.dtypes                                                                  

a    object
b    object
dtype: object

# Actually converts string to numeric - hard conversion
df.apply(pd.to_numeric).dtypes                                             

a    int64
b    int64
dtype: object

# Infers better data types for object data - soft conversion
df.infer_objects().dtypes                                                  

a    object  # no change
b     int64
dtype: object

# Same as infer_objects, but converts to equivalent ExtensionType
df.convert_dtypes().dtypes                                                     

1

আমি ভেবেছিলাম আমারও একই সমস্যা রয়েছে তবে আসলে আমার কিছুটা পার্থক্য রয়েছে যা সমস্যার সমাধান সহজ করে তোলে। অন্যদের জন্য এই প্রশ্নটি দেখার জন্য এটি আপনার ইনপুট তালিকার ফর্ম্যাটটি চেক করার মতো। আমার ক্ষেত্রে সংখ্যাগুলি প্রাথমিকভাবে প্রশ্নের মতো স্ট্রিং না করে ভাসমান:

a = [['a', 1.2, 4.2], ['b', 70, 0.03], ['x', 5, 0]]

তবে ডেটাফ্রেম তৈরির আগে তালিকার খুব বেশি প্রক্রিয়াজাতকরণের মাধ্যমে আমি প্রকারগুলি হারাতে থাকি এবং সমস্ত কিছু স্ট্রিংয়ে পরিণত হয়।

একটি নমপি অ্যারের মাধ্যমে ডেটা ফ্রেম তৈরি করা

df = pd.DataFrame(np.array(a))

df
Out[5]: 
   0    1     2
0  a  1.2   4.2
1  b   70  0.03
2  x    5     0

df[1].dtype
Out[7]: dtype('O')

প্রশ্নের মতো একই ডেটা ফ্রেম দেয়, যেখানে কলাম 1 এবং 2-এ প্রবেশের স্ট্রিং হিসাবে বিবেচিত হয়। তবে করছেন

df = pd.DataFrame(a)

df
Out[10]: 
   0     1     2
0  a   1.2  4.20
1  b  70.0  0.03
2  x   5.0  0.00

df[1].dtype
Out[11]: dtype('float64')

সঠিকভাবে ফর্ম্যাটটিতে কলামগুলি সহ একটি ডেটা ফ্রেম দেয়


0

প্যান্ডাস শুরু হচ্ছে 1.0.0, আমাদের আছে pandas.DataFrame.convert_dtypes। আপনি কী ধরণের রূপান্তর করতে পারেন তা নিয়ন্ত্রণ করতে পারেন!

In [40]: df = pd.DataFrame(
    ...:     {
    ...:         "a": pd.Series([1, 2, 3], dtype=np.dtype("int32")),
    ...:         "b": pd.Series(["x", "y", "z"], dtype=np.dtype("O")),
    ...:         "c": pd.Series([True, False, np.nan], dtype=np.dtype("O")),
    ...:         "d": pd.Series(["h", "i", np.nan], dtype=np.dtype("O")),
    ...:         "e": pd.Series([10, np.nan, 20], dtype=np.dtype("float")),
    ...:         "f": pd.Series([np.nan, 100.5, 200], dtype=np.dtype("float")),
    ...:     }
    ...: )

In [41]: dff = df.copy()

In [42]: df 
Out[42]: 
   a  b      c    d     e      f
0  1  x   True    h  10.0    NaN
1  2  y  False    i   NaN  100.5
2  3  z    NaN  NaN  20.0  200.0

In [43]: df.dtypes
Out[43]: 
a      int32
b     object
c     object
d     object
e    float64
f    float64
dtype: object

In [44]: df = df.convert_dtypes()

In [45]: df.dtypes
Out[45]: 
a      Int32
b     string
c    boolean
d     string
e      Int64
f    float64
dtype: object

In [46]: dff = dff.convert_dtypes(convert_boolean = False)

In [47]: dff.dtypes
Out[47]: 
a      Int32
b     string
c     object
d     string
e      Int64
f    float64
dtype: object
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.