প্রতিটি কলামের নামের সাথে প্রত্যয় (বা উপসর্গ) কীভাবে যুক্ত করবেন?


89

আমি _xপ্রতিটি কলামের নামের মতো প্রত্যয় যুক্ত করতে চাই:

featuresA = myPandasDataFrame.columns.values + '_x'

আমি এটা কিভাবে করবো? অতিরিক্তভাবে, আমি x_প্রত্যয় হিসাবে যুক্ত করতে চাইলে কীভাবে সমাধানটির পরিবর্তন হবে?

উত্তর:


124

আপনি একটি listউপলব্ধি ব্যবহার করতে পারেন :

df.columns = [str(col) + '_x' for col in df.columns]

অন্য অন্তর্নিহিত পদ্ধতিগুলির মতো .add_suffix()এবং অন্তর্নিহিত পদ্ধতিও রয়েছে .add_prefix()


এটি সবচেয়ে সরল এবং মার্জিত উত্তর!
জিনুয়া ওয়াং

165

নিম্নলিখিতটি আমার মতে প্রত্যয় যুক্ত করার সর্বোত্তম উপায়।

df = df.add_suffix('_some_suffix')

যেহেতু এটি এমন একটি ফাংশন যা ডেটাফ্রেমে ডাকা হয় এবং ডেটাফ্রেম রিটার্ন করে - আপনি এটি কলগুলির শৃঙ্খলে ব্যবহার করতে পারেন।


14
আপনি নামের সাথে একটি উপসর্গ যুক্ত করতে চাইলে আপনি add_prefix ব্যবহার করতে পারেন।
জর্জি

9
খুব খারাপ এটি পরিবর্তনযোগ্য হতে পারে না (অর্থাত্ inplace=Trueপ্যারামিটারের বিকল্প নেই)। অন্যথায়, নিখুঁত।
ইজোসেফ

আমি মনে করি যে এটি কিছু পরিস্থিতিতে গৃহীত উত্তরের চেয়ে ভাল, কারণ এটি নিজস্ব বিবৃতি প্রয়োজনের চেয়ে একক বিবৃতিতে পরিচালিত একটি শৃঙ্খলে ব্যবহার করা যেতে পারে।
ক্যাপ্টেন লেপটন


4
প্রত্যয়টি যদি ধ্রুবক না হয়। শিরোনামটি প্রত্যয় সম্পর্কে কথা বলে। পোস্টটি একটি একক ধ্রুবক প্রত্যয়টির সুযোগকে সঙ্কুচিত করে, তবে আমরা যদি সাধারণ শর্তে পোস্ট শিরোনামের উত্তর দিই, তবে তালিকা বোধগম্যতা বা অন্যান্য পুনরাবৃত্তযোগ্য মাধ্যমে কলামগুলি সেট করা আরও নমনীয়
ক্যাপ্টেন লেপটন

18

মার্জিত ইন-প্লেস কনক্যাটেনেশন

আপনি যদি dfজায়গায় স্থান পরিবর্তন করার চেষ্টা করছেন , তবে সবচেয়ে সস্তা (এবং সর্বাধিক সহজ) বিকল্পটি সরাসরি স্থানটিতে সংযোজন df.columns(অর্থাত্‍ ব্যবহার করে Index.__iadd__)।

df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df

   A   B
0  9  12
1  4   7
2  2   5
3  1   4

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

একটি উপসর্গ যোগ করতে, আপনি একইভাবে ব্যবহার করতে হবে

df.columns = 'some_prefix_' + df.columns
df

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

আর একটি সস্তার বিকল্প f-stringফর্ম্যাটিং সহ একটি তালিকা বোধগম্যতা ব্যবহার করছে (পাইথন ৩..6 + এ উপলব্ধ)।

df.columns = [f'{c}_some_suffix' for c in df]
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

এবং উপসর্গের জন্য, একইভাবে,

df.columns = [f'some_prefix{c}' for c in df]

পদ্ধতি চেইনিং

পদ্ধতিতে শৃঙ্খলাবদ্ধ হওয়ার সময় * সংশোধন করাও সম্ভব। প্রত্যয় যুক্ত করতে, ব্যবহার করুনDataFrame.add_suffix

df.add_suffix('_some_suffix')

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

এটি ডেটার একটি অনুলিপি ফেরত দেয় । IOW, dfপরিবর্তিত হয় না।

উপসর্গ যোগ করার সাথেও সম্পন্ন করা হয় DataFrame.add_prefix

df.add_prefix('some_prefix_')

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

যা পরিবর্তনও করে না df


সমালোচনা add_*fix

আপনি পদ্ধতি শৃঙ্খলা সম্পাদনের চেষ্টা করতে পারলে এগুলি ভাল পদ্ধতি:

df.some_method1().some_method2().add_*fix(...)

তবে, add_prefix(এবং add_suffix) শিরোনামগুলি সংশোধন করার জন্য পুরো ডেটা ফ্রেমের একটি অনুলিপি তৈরি করে । আপনি যদি বিশ্বাস করেন যে এটি অপব্যয়যুক্ত, তবে এখনও শৃঙ্খলাবদ্ধ হতে চান, আপনি কল করতে পারেন pipe:

def add_suffix(df):
    df.columns += '_some_suffix'
    return df

df.some_method1().some_method2().pipe(add_suffix)

এই মার্জিত! আপনি যদি কলামগুলির একটি উপসেটে উপসর্গ বা প্রত্যয় যুক্ত করতে চান যেমন কলামগুলির নামগুলিতে প্রত্যেকটি কলামের পরিবর্তে একটি সাধারণ শব্দ (যেমন newবা old) থাকে? ধন্যবাদ
বোভেন লিউ

4
@ বোয়েনলাইউ আমি পরিবর্তে df.rename () দিয়ে যাওয়ার পরামর্শ দিচ্ছি ... তাদের নতুন নামের সাথে ম্যাপিংয়ের একটি অভিধান পাস করুন। তারপরে অক্ষ = 1 দিয়ে পুনরায় নাম কল করুন। আপনি শর্তাধীন তালিকা বোধগম্য কার্যও ব্যবহার করতে পারেন।
সিএস 95

শুধুমাত্র কলামের নাম হিসাবে নিয়মিত ডেটা ধরণের সাথে কাজ করে, যদি না আপনার কলামগুলি যেমন একটি রেঞ্জইন্ডেক্স হয় df = pd.DataFrame([[1,2,3]]*10)- উদাহরণস্বরূপ -> df.columnsতবে আপনি ব্যবহার করতে পারেনdf.add_suffix('_x')
questionto42

আপনি df.columns = df.columns.astype(str) + '_x' আমার প্রথম পদ্ধতির শো হিসাবে করতে পারেন ।
cs95

4

উপরে প্রস্তাবিত এই সমাধানটি আমি দেখতে পাইনি সুতরাং এটি তালিকায় যুক্ত করুন:

df.columns += '_x'

এবং আপনি উপসর্গের দৃশ্যের জন্য খুব সহজেই মানিয়ে নিতে পারেন।


প্রত্যয়ের জন্য সেরা সমাধান, যদিও এটি অবশ্যই উপসর্গের জন্য ব্যবহার করা যায় না।
questionto42

কলামের নামগুলিতে কেবল নিয়মিত ডেটা ধরণের সাথে কাজ করে, যদি না আপনার কলামগুলি যেমন একটি রেঞ্জইন্ডেক্স হয় df = pd.DataFrame([[1,2,3]]*10)- উদাহরণস্বরূপ -> df.columnsতবে আপনি ব্যবহার করতে পারেনdf.add_suffix('_x')
questionto42

1

আপনার কলামের নামগুলিতে প্রত্যয় (বা উপসর্গ) যুক্ত করার 4 টি উপায় আমি জানি:

1- df.columns = [str(col) + '_some_suffix' for col in df.columns]

বা

2- df.rename(columns= lambda col: col+'_some_suffix')

বা

3- df.columns += '_some_suffix'অনেক ইজিয়ার

বা, সবচেয়ে ভাল:

3- df.add_suffix('_some_suffix')


0

ব্যবহার DataFrame.rename

অবচয় add_prefixএবংadd_suffix

পান্ডাস ভবিষ্যত সংস্করণে add_prefixএবং add_suffixকরা হবে অবচিত । নতুন পরামর্শ দেওয়া পদ্ধতিটি হ'ল DataFrame.rename:

df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
   A  B
0  0  4
1  1  5
2  2  6

স্ট্রিং ফর্ম্যাটিং renameসহ axis=1এবং ব্যবহার করে :

df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)

   col_A  col_B
0      0      4
1      1      5
2      2      6

প্রকৃতপক্ষে আপনার কলামের নামগুলি ওভাররাইট করতে, আমরা প্রত্যাবর্তিত মানগুলি আমাদের df:

df = df.rename('col_{}'.format, axis=1)

বা ব্যবহার করুন inplace=True:

df.rename('col_{}'.format, axis=1, inplace=True)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.