python tutorial পান্ডায় স্ট্রিংগুলির একটি কলামকে কারখানা করুন



python wiki (1)

প্রশ্নটি হিসাবে, আমার কাছে একটি ডেটা ফ্রেম রয়েছে df_original যা বেশ বড় তবে দেখতে দেখতে:

        ID    Count   Column 2   Column 3  Column 4
RowX    1      234.     255.       yes.      452
RowY    1      123.     135.       no.       342
RowW    1      234.     235.       yes.      645
RowJ    1      123.     115.       no.       342
RowA    1      234.     285.       yes.      233
RowR    1      123.     165.       no.       342
RowX    2      234.     255.       yes.      234
RowY    2      123.     135.       yes.      342
RowW    2      234.     235.       yes.      233
RowJ    2      123.     115.       yes.      342
RowA    2      234.     285.       yes.      312
RowR    2      123.     165.       no.       342
.
.
.
RowX    1233   234.     255.       yes.      133
RowY    1233   123.     135.       no.       342
RowW    1233   234.     235.       no.       253
RowJ    1233   123.     115.       yes.      342
RowA    1233   234.     285.       yes.      645
RowR    1233   123.     165.       no.       342

আমি পাঠ্য ডেটা থেকে মুক্তি পাওয়ার এবং এটি একটি পূর্বনির্ধারিত সংখ্যাসমূহের সাথে প্রতিস্থাপনের চেষ্টা করছি। উদাহরণস্বরূপ, এই ক্ষেত্রে আমি Column3 এর yes বা no মান যথাক্রমে 1 বা 0 সাথে প্রতিস্থাপন করতে চাই। আমাকে নিজেই প্রবেশ করে মানগুলি পরিবর্তন না করে এটি করার কোনও উপায় আছে কি?


v

RowX    yes
RowY     no
RowW    yes
RowJ     no
RowA    yes
RowR     no
RowX    yes
RowY    yes
RowW    yes
RowJ    yes
RowA    yes
RowR     no
Name: Column 3, dtype: object

pd.factorize

1 - pd.factorize(v)[0]
array([1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0])

np.where

np.where(v == 'yes', 1, 0)
array([1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0])

pd.Categorical / astype('category')

pd.Categorical(v).codes
array([1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0], dtype=int8)
v.astype('category').cat.codes

RowX    1
RowY    0
RowW    1
RowJ    0
RowA    1
RowR    0
RowX    1
RowY    1
RowW    1
RowJ    1
RowA    1
RowR    0
dtype: int8

pd.Series.replace

v.replace({'yes' : 1, 'no' : 0})

RowX    1
RowY    0
RowW    1
RowJ    0
RowA    1
RowR    0
RowX    1
RowY    1
RowW    1
RowJ    1
RowA    1
RowR    0
Name: Column 3, dtype: int64

উপরের একটি মজা, সাধারণ সংস্করণ:

v.replace({r'^(?!yes).*$' : 0}, regex=True).astype(bool).astype(int)

RowX    1
RowY    0
RowW    1
RowJ    0
RowA    1
RowR    0
RowX    1
RowY    1
RowW    1
RowJ    1
RowA    1
RowR    0
Name: Column 3, dtype: int64

"yes" নয় এমন যে কোনও কিছু 0





categorical-data