পান্ডাস ডেটা ফ্রেমে একটি নির্দিষ্ট কলামের নাম পরিবর্তন করা


195

আমি একটিতে একটি নির্দিষ্ট কলামের নাম পরিবর্তন করার জন্য একটি মার্জিত উপায় খুঁজছিলাম DataFrame

ডেটা খেলুন ...

import pandas as pd
d = {
         'one': [1, 2, 3, 4, 5],
         'two': [9, 8, 7, 6, 5],
         'three': ['a', 'b', 'c', 'd', 'e']
    }
df = pd.DataFrame(d)

আমি এখনও অবধি সবচেয়ে মার্জিত সমাধান পেয়েছি ...

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

আমি একটি সাধারণ ওয়ান-লাইনারের আশা করছিলাম ... এই প্রচেষ্টা ব্যর্থ হয়েছে ...

df.columns[df.columns.tolist().index('one')] = 'another_name'

কৃতজ্ঞভাবে কোনও ইঙ্গিত পেয়েছে।

উত্তর:


355

একটি লাইনার বিদ্যমান:

In [27]: df=df.rename(columns = {'two':'new_name'})

In [28]: df
Out[28]: 
  one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

নিম্নলিখিত জন্য docstring হয় renameপদ্ধতি।

সংজ্ঞা: df.rename (স্ব, সূচক = কিছুই নয়, কলাম = কিছুই নয়, অনুলিপি = সত্য, অন্তর্ভুক্ত = মিথ্যা)
Docstring:
ইনপুট ফাংশন বা ব্যবহার করে সূচক এবং / অথবা কলামগুলি পরিবর্তন করুন
ফাংশন। ফাংশন / ডিক মানগুলি অবশ্যই অনন্য হতে হবে (1-থেকে -1)। লেবেল না
একটি ডিক / সিরিজের মধ্যে থাকা যেমন আছে তেমন রেখে দেওয়া হবে।

পরামিতি
----------
সূচক: ডিক্ট-মত বা ফাংশন, optionচ্ছিক
    সূচক মানগুলিতে প্রয়োগের জন্য রূপান্তর
কলাম: ডিক্ট-মত বা ফাংশন, alচ্ছিক
    কলাম মানগুলিতে প্রয়োগের জন্য রূপান্তর
অনুলিপি: বুলিয়ান, ডিফল্ট সত্য
    অন্তর্নিহিত ডেটাও অনুলিপি করুন
ইনপ্লেস: বুলিয়ান, ডিফল্ট মিথ্যা
    কোনও নতুন ডেটাফ্রেম ফিরে আসবে কিনা। যদি সত্য হয় তবে অনুলিপিটির মান
    উপেক্ষা করেছেন।

আরো দেখুন
--------
Series.rename

রিটার্নস
-------
নতুন নামকরণ করা হয়েছে: ডেটাফ্রেম (নতুন অবজেক্ট)

@ জেওং-ইউন লি জবাবটিতে প্রদর্শিত হিসাবে আমি ইনপ্লেস = সত্য ব্যবহার না করে এটি আমার পক্ষে কাজ করে না।
JStrahl

108

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

df.rename(columns={'two':'new_name'}, inplace=True)

39

কি সম্পর্কে?

df.columns.values[2] = "new_name"

11
পরে আপনি ডিএফ ['নতুন_নাম'] এর মতো অন্যান্য ক্রিয়াকলাপে কলামের নামটি ব্যবহার করেন যদি তা কার্যকর হয় না
মাস্টার দই

4
এই উত্তরটি আমার জন্য নির্দিষ্ট কলামটি নতুন নামে পরিবর্তন করতে কার্যকর হয়েছিল। প্রথম কলামটি সূচক 0, দ্বিতীয় কলামটি সূচক 1 এবং আরও অনেক কিছু। চমৎকার সমাধান .. এবং আমি নিশ্চিত যে এটি আরও বেশি লোককে সহায়তা করবে .. অন্য সমাধানগুলির জন্য যেমন আপনার পূর্ববর্তী কলামের নামগুলি আগে জানা এবং অনুলিপি করা প্রয়োজন .... যদিও এটি দ্রুত এবং নোংরা পদ্ধতি .. যার নিজস্ব ব্যবহার রয়েছে।
ihightower

1
@ মাস্টারইগার্ট আপনার মন্তব্য সঠিক নয় not df['new_name']উপরে উল্লিখিত হিসাবে ভেরিয়েবল পরিবর্তন করার পরে (এবং অন্যান্য পান্ডাস জিনিসগুলি) সম্পাদন করা সম্ভব । আপনার মন্তব্যটি যখন এটি প্রথম পোস্ট করা হয়েছিল তখন বৈধ হতে পারে।
জ্যাকব এইচ

1
বলা হচ্ছে, renameপদ্ধতিগুলি ব্যবহার করা একটি ভাল সমাধান।
জ্যাকব এইচ

6

পান্ডাস 0.21 এর এখন একটি অক্ষের প্যারামিটার রয়েছে

পুনরায় নামকরণ পদ্ধতিটি বাকি পান্ডাস এপিআইয়ের বেশিরভাগটির সাথে তাল মিলানোর জন্য একটি অক্ষ পরামিতি অর্জন করেছে।

সুতরাং, এটি ছাড়াও:

df.rename(columns = {'two':'new_name'})

আপনি করতে পারেন:

df.rename({'two':'new_name'}, axis=1)

অথবা

df.rename({'two':'new_name'}, axis='columns')

df.rename ({'two': 'new_name'}, অক্ষ = 'কলাম') প্রকারের তীরচিহ্ন: 'অক্ষ' এবং 'সূচক' বা 'কলাম' উভয়ই নির্দিষ্ট করতে পারে না।
এখানে

@ হেরেহরে নিশ্চিত করুন যে আপনি পান্ডাস সংস্করণ 0.21 তে আছেন। কি pd.__version__আপনার সংস্করণ চেক করতে
টেড Petrou

5

আপনি যদি জানেন যে এটি # কলামটি কী (প্রথম / দ্বিতীয় / নবম), তবে এই নামটির নাম বা নামবিহীন, এবং এক লাইনে এই জাতীয় প্রশ্নের পোস্ট করা এই সমাধানটি কার্যকর হয়: https://stackoverflow.com/a/26336314/ 4355695

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)

3

কলামগুলির নাম পরিবর্তনের জন্য এখানে সহজ সরল যা উভয় Default(0,1,2,etc;)এবং বিদ্যমান কলামগুলির জন্য কাজ করবে তবে বৃহত্তর ডেটা সেট (অনেকগুলি কলাম রয়েছে) এর জন্য খুব বেশি কার্যকর নয়।

বৃহত্তর ডেটা সেটের জন্য আমরা যে কলামগুলি আমাদের প্রয়োজন তা স্লাইস করে নীচের কোডটি প্রয়োগ করতে পারি:

df.columns = ['new_name','new_name1','old_name']

2

নিম্নলিখিত সংক্ষিপ্ত কোড সাহায্য করতে পারে:

df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})

কলামগুলি থেকে স্পেসগুলি সরিয়ে ফেলুন।


আমি AttributeError: 'int' object has no attribute 'replace'আপনাকে এই প্রসারিত করতে পারে পেতে রাখা ।
নির্মল

2

পান্ডাস সংস্করণ 0.23.4

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

রেকর্ড এর জন্য:

সূচক বাদ দেওয়া = স্ট্রিং এড়াতে ত্রুটি দেবে একটি অপ্রত্যাশিত আর্গুমেন্ট 'কলাম' রয়েছে


1

অন্য বিকল্পটি হ'ল কলামটি অনুলিপি করে ফেলে দেওয়া হবে:

df = pd.DataFrame(d)
df['new_name'] = df['two']
df = df.drop('two', axis=1)
df.head()

এর পরে আপনি ফলাফল পাবেন:

    one three   new_name
0   1   a       9
1   2   b       8
2   3   c       7
3   4   d       6
4   5   e       5

2
কলামগুলির সূচকের ক্রম গুরুত্বপূর্ণ হওয়ার ক্ষেত্রে এই পদ্ধতিটি সাহায্য করবে না। নতুন কলামটি শেষে তৈরি করা হবে।
লুচি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.