টিএল; ডিআর সংস্করণ:
এর সাধারণ ক্ষেত্রে:
- আমার একটি ডিলিমিটার সহ একটি পাঠ্য কলাম রয়েছে এবং আমি দুটি কলাম চাই
সহজ সমাধানটি হ'ল:
df['A'], df['B'] = df['AB'].str.split(' ', 1).str
অথবা আপনি বিভাজনের প্রতিটি প্রবেশের জন্য স্বয়ংক্রিয়ভাবে এক কলাম সহ একটি ডেটা ফ্রেম তৈরি করতে পারেন:
df['AB'].str.split(' ', 1, expand=True)
expand=True
আপনার স্ট্রিংগুলিতে একটি অ-অভিন্ন সংখ্যক বিভাজন রয়েছে এবং আপনি None
অনুপস্থিত মানগুলি প্রতিস্থাপন করতে চান তবে আপনাকে অবশ্যই ব্যবহার করতে হবে ।
লক্ষ্য করুন কীভাবে, উভয় ক্ষেত্রেই .tolist()
পদ্ধতিটি প্রয়োজনীয় নয়। না হয় zip()
।
বিস্তারিত:
str.extract()
পদ্ধতির শক্তি প্রদর্শনে অ্যান্ডি হেডেনের সমাধান সবচেয়ে দুর্দান্ত ।
কিন্তু (ড্যাশ দ্বারা মতো বিভাজন, বা হোয়াইটস্পেস দ্বারা বিভাজন) একটি পরিচিত বিভাজক উপর একটি সহজ বিভক্ত জন্য, .str.split()
পদ্ধতি যথেষ্ট 1 । এটি স্ট্রিংয়ের একটি কলামে (সিরিজ) কাজ করে এবং তালিকার একটি কলাম (সিরিজ) প্রদান করে:
>>> import pandas as pd
>>> df = pd.DataFrame({'AB': ['A1-B1', 'A2-B2']})
>>> df
AB
0 A1-B1
1 A2-B2
>>> df['AB_split'] = df['AB'].str.split('-')
>>> df
AB AB_split
0 A1-B1 [A1, B1]
1 A2-B2 [A2, B2]
1: আপনি যদি নিশ্চিত হন না যে প্রথম দুটি প্যারামিটারগুলি কী করে তবে .str.split()
আমি পদ্ধতির প্লেইন পাইথন সংস্করণটির জন্য ডক্সের প্রস্তাব দিই ।
তবে আপনি কীভাবে যাবেন:
- দ্বি-উপাদান তালিকা সহ একটি কলাম
প্রতি:
- দুটি কলাম, প্রতিটি তালিকার সংশ্লিষ্ট উপাদান রয়েছে?
ঠিক আছে, আমাদের .str
একটি কলামের বৈশিষ্ট্যটি খুব কাছ থেকে নেওয়া উচিত ।
এটি একটি icalন্দ্রজালিক অবজেক্ট যা কলামে প্রতিটি উপাদানকে স্ট্রিং হিসাবে আচরণ করে এমন পদ্ধতিগুলি সংগ্রহ করতে ব্যবহৃত হয় এবং তারপরে প্রতিটি উপাদানটিতে যথাসম্ভব দক্ষতার সাথে সম্পর্কিত পদ্ধতি প্রয়োগ করে:
>>> upper_lower_df = pd.DataFrame({"U": ["A", "B", "C"]})
>>> upper_lower_df
U
0 A
1 B
2 C
>>> upper_lower_df["L"] = upper_lower_df["U"].str.lower()
>>> upper_lower_df
U L
0 A a
1 B b
2 C c
তবে এর সূচক দ্বারা স্ট্রিংয়ের প্রতিটি উপাদান পাওয়ার জন্য এটি একটি "ইনডেক্সিং" ইন্টারফেসও রয়েছে:
>>> df['AB'].str[0]
0 A
1 A
Name: AB, dtype: object
>>> df['AB'].str[1]
0 1
1 2
Name: AB, dtype: object
অবশ্যই, এই সূচকের ইন্টারফেসটি .str
যদি প্রতিটি সূচকে সূচকে চিহ্নিত করা হয় তবে প্রকৃতপক্ষে কোনও স্ট্রিং থাকে না, যতক্ষণ না এটি সূচী করা যায়, তাই:
>>> df['AB'].str.split('-', 1).str[0]
0 A1
1 A2
Name: AB, dtype: object
>>> df['AB'].str.split('-', 1).str[1]
0 B1
1 B2
Name: AB, dtype: object
তারপরে, পাইথন টিপলকে পুনরাবৃত্ত করার জন্য পুনরাবৃত্তি করার সুবিধা নেওয়া সহজ বিষয়
>>> df['A'], df['B'] = df['AB'].str.split('-', 1).str
>>> df
AB AB_split A B
0 A1-B1 [A1, B1] A1 B1
1 A2-B2 [A2, B2] A2 B2
অবশ্যই, স্ট্রিংগুলির একটি কলাম বিভক্ত করে একটি ডেটা ফ্রেম পাওয়া এত দরকারী যে .str.split()
পদ্ধতিটি expand=True
প্যারামিটার দিয়ে এটি করতে পারে :
>>> df['AB'].str.split('-', 1, expand=True)
0 1
0 A1 B1
1 A2 B2
সুতরাং, আমরা যা চেয়েছিলাম তা সম্পাদনের আরেকটি উপায় হ'ল:
>>> df = df[['AB']]
>>> df
AB
0 A1-B1
1 A2-B2
>>> df.join(df['AB'].str.split('-', 1, expand=True).rename(columns={0:'A', 1:'B'}))
AB A B
0 A1-B1 A1 B1
1 A2-B2 A2 B2
expand=True
সংস্করণ, যদিও আর tuple unpacking পদ্ধতি উপর একটি স্বতন্ত্র সুবিধা আছে। টুপল আনপ্যাকিং বিভিন্ন দৈর্ঘ্যের স্প্লিটগুলির সাথে ভালভাবে মোকাবেলা করে না:
>>> df = pd.DataFrame({'AB': ['A1-B1', 'A2-B2', 'A3-B3-C3']})
>>> df
AB
0 A1-B1
1 A2-B2
2 A3-B3-C3
>>> df['A'], df['B'], df['C'] = df['AB'].str.split('-')
Traceback (most recent call last):
[...]
ValueError: Length of values does not match length of index
>>>
তবে যে কলামগুলিতে পর্যাপ্ত "বিভাজন" নেই সেখানে expand=True
রেখে সুন্দরভাবে পরিচালনা করে None
:
>>> df.join(
... df['AB'].str.split('-', expand=True).rename(
... columns={0:'A', 1:'B', 2:'C'}
... )
... )
AB A B C
0 A1-B1 A1 B1 None
1 A2-B2 A2 B2 None
2 A3-B3-C3 A3 B3 C3
read_table()
বাread_fwf()