পান্ডাস ডেটা ফ্রেম সূচকের নাম পরিবর্তন করুন


142

ডেটটাইম সূচক সহ আমি শিরোনাম ছাড়াই একটি সিএসভি ফাইল করেছি। আমি সূচি এবং কলামের নাম পরিবর্তন করতে চাই, তবে df.rename () দিয়ে কেবল কলামের নামই পুনরায় নামকরণ করা হবে। বাগ? আমি সংস্করণ 0.12.0 এ আছি

In [2]: df = pd.read_csv(r'D:\Data\DataTimeSeries_csv//seriesSM.csv', header=None, parse_dates=[[0]], index_col=[0] )

In [3]: df.head()
Out[3]: 
                   1
0                   
2002-06-18  0.112000
2002-06-22  0.190333
2002-06-26  0.134000
2002-06-30  0.093000
2002-07-04  0.098667

In [4]: df.rename(index={0:'Date'}, columns={1:'SM'}, inplace=True)

In [5]: df.head()
Out[5]: 
                  SM
0                   
2002-06-18  0.112000
2002-06-22  0.190333
2002-06-26  0.134000
2002-06-30  0.093000
2002-07-04  0.098667

5
2017 এ এই প্রশ্নে যারা আসছেন তাদের জন্য, পদ্ধতির খুব বিশদ বিবরণ দেখতে নীচে এই উত্তরটি দেখুনrename_axis
টেড পেট্রো

3
এবং যাদের নীচে পুরো উত্তরের উত্তর পড়তে বিরক্ত করা যায় না, তারপরে দ্রুত সমাধানটি df.rename_axis("Date", axis='index', inplace=True)ডকুমেন্টেশন অনুযায়ী রয়েছে পান্ডাস.পিডিটা.আর।df.index.names = ['Date']
প্যানডাসডোকস

উত্তর:


237

renameপদ্ধতি সূচক যা প্রযোজ্য সূচির জন্য একটি অভিধান লাগে মান
আপনি সূচী স্তরের নাম পরিবর্তন করতে চান:

df.index.names = ['Date']

এটি সম্পর্কে ভাবার একটি ভাল উপায় হ'ল কলাম এবং সূচক একই ধরণের অবজেক্ট ( Indexবা MultiIndex) এবং আপনি ট্রান্সপোজের মাধ্যমে দুটি বিনিময় করতে পারেন।

সূচির নামগুলি কলামগুলির সাথে একইরকম অর্থ হওয়ায় এটি কিছুটা বিভ্রান্তিকর, তাই এখানে আরও কয়েকটি উদাহরণ দেওয়া হল:

In [1]: df = pd.DataFrame([[1, 2, 3], [4, 5 ,6]], columns=list('ABC'))

In [2]: df
Out[2]: 
   A  B  C
0  1  2  3
1  4  5  6

In [3]: df1 = df.set_index('A')

In [4]: df1
Out[4]: 
   B  C
A      
1  2  3
4  5  6

আপনি সূচীতে নামটি দেখতে পারেন, যা মান 1: পরিবর্তন করতে পারে

In [5]: df1.rename(index={1: 'a'})
Out[5]: 
   B  C
A      
a  2  3
4  5  6

In [6]: df1.rename(columns={'B': 'BB'})
Out[6]: 
   BB  C
A       
1   2  3
4   5  6

স্তরের নামগুলির নামকরণ করা হচ্ছে:

In [7]: df1.index.names = ['index']
        df1.columns.names = ['column']

দ্রষ্টব্য: এই বৈশিষ্ট্যটি কেবল একটি তালিকা এবং আপনি তালিকা বোধ / মানচিত্র হিসাবে নামকরণ করতে পারেন।

In [8]: df1
Out[8]: 
column  B  C
index       
1       2  3
4       5  6

2
দুর্দান্ত উত্তর। কেবল একটি মৃদু অনুস্মারক যে ছাড়া "inplace =True", df1.renameসত্যিকার অর্থে কোনও পরিবর্তন হবে না।
সারা

63

বর্তমানে নির্বাচিত উত্তরে সেই rename_axisপদ্ধতিটি উল্লেখ করা হয়নি যা সূচি এবং কলাম স্তরগুলির নাম পরিবর্তন করতে ব্যবহৃত হতে পারে।


সূচকের স্তরগুলির নতুন নামকরণের ক্ষেত্রে পান্ডাদের কিছুটা কৌতূহল রয়েছে। rename_axisসূচি স্তরের নাম পরিবর্তন করতে একটি নতুন ডেটাফ্রেম পদ্ধতিও উপলব্ধ।

আসুন একটি ডেটা ফ্রেম একবার দেখুন

df = pd.DataFrame({'age':[30, 2, 12],
                       'color':['blue', 'green', 'red'],
                       'food':['Steak', 'Lamb', 'Mango'],
                       'height':[165, 70, 120],
                       'score':[4.6, 8.3, 9.0],
                       'state':['NY', 'TX', 'FL']},
                       index = ['Jane', 'Nick', 'Aaron'])

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

এই ডাটাফ্রেমের প্রতিটি সারি এবং কলাম সূচকের জন্য একটি স্তর রয়েছে। উভয় সারি এবং কলাম সূচকের কোনও নাম নেই। আসুন সারি সূচকের স্তরের নামটি 'নাম' করে রাখি।

df.rename_axis('names')

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

rename_axisপদ্ধতি এছাড়াও পরিবর্তন করে কলাম স্তর নাম পরিবর্তন করার ক্ষমতা থাকবে axisপরামিতি:

df.rename_axis('names').rename_axis('attributes', axis='columns')

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

আপনি যদি কিছু কলাম দিয়ে সূচকটি সেট করেন তবে কলামের নামটি নতুন সূচক স্তরের নাম হয়ে যাবে। আসুন আমাদের মূল ডেটাফ্রেমের সূচকের স্তরগুলিতে যুক্ত করুন:

df1 = df.set_index(['state', 'color'], append=True)
df1

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

মূল সূচকের কোনও নাম নেই তা লক্ষ্য করুন। আমরা এখনও ব্যবহার করতে পারি rename_axisতবে এটি সূচী স্তরগুলির সংখ্যার সমান দৈর্ঘ্যের একটি তালিকা পাস করতে হবে।

df1.rename_axis(['names', None, 'Colors'])

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

আপনি Noneকার্যকরভাবে সূচক স্তরের নামগুলি মুছতে ব্যবহার করতে পারেন ।


সিরিজ একইভাবে কাজ করে তবে কিছু পার্থক্য নিয়ে

তিনটি সূচকের স্তর সহ একটি সিরিজ তৈরি করা যাক

s = df.set_index(['state', 'color'], append=True)['food']
s

       state  color
Jane   NY     blue     Steak
Nick   TX     green     Lamb
Aaron  FL     red      Mango
Name: food, dtype: object

আমরা rename_axisকীভাবে ডেটাফ্রেমগুলি দিয়েছিলাম সেভাবে ব্যবহার করতে পারি

s.rename_axis(['Names','States','Colors'])

Names  States  Colors
Jane   NY      blue      Steak
Nick   TX      green      Lamb
Aaron  FL      red       Mango
Name: food, dtype: object

লক্ষ্য করুন যে সেখানে বলা সিরিজের নীচে মেটাডেটার একটি অতিরিক্ত টুকরা রয়েছে Name। কোনও ডেটাফ্রেম থেকে একটি সিরিজ তৈরি করার সময়, এই বৈশিষ্ট্যটি কলামের নামে সেট করা থাকে।

আমরা স্ট্রিংয়ের নামটি renameপরিবর্তনের জন্য পদ্ধতিতে পাস করতে পারি

s.rename('FOOOOOD')

       state  color
Jane   NY     blue     Steak
Nick   TX     green     Lamb
Aaron  FL     red      Mango
Name: FOOOOOD, dtype: object

ডেটা ফ্রেমগুলির এই বৈশিষ্ট্যটি নেই এবং প্রকৃতপক্ষে যদি এটির মতো ব্যবহার করা হয় তবে একটি ব্যতিক্রম বাড়িয়ে তুলবে

df.rename('my dataframe')
TypeError: 'str' object is not callable

পান্ডাস 0.21 এর আগে, আপনি rename_axisসূচক এবং কলামগুলিতে মানগুলির পুনরায় নাম ব্যবহার করতে পারেন । এটি অবচয় করা হয়েছে তাই এটি করবেন না


1
আপনার df1 = df.set_index(['state', 'color'], append=True)সাথে কি অদলবদল করা উচিত df1.rename_axis(['names', None, 'Colors'])?
সালহিন

আমি কী যদি "নিক" এর নাম "নিকোলাস" রাখতে চাই? আমি যখন "পুনর্নবীকরণ পান্ডাস সূচক" গুগল করে এখানে এসেছিলাম তখন আমি যা খুঁজছিলাম। সম্পাদনা: ওহ অপেক্ষা করুন, গৃহীত উত্তরটি এটি ব্যাখ্যা করে যে এটি প্রথম আমার কাছে স্পষ্ট ছিল না।
বেন ফার্মার

দুর্দান্ত, এটিই কেবলমাত্র উত্তর যা শৃঙ্খলিত কার্যাদি ব্যবহার করা যেতে পারে!
ইয়ানস

19

আরও নতুন pandasসংস্করণ জন্য

df.index = df.index.rename('new name')

অথবা

df.index.rename('new name', inplace=True)

যদি কোনও ডেটা ফ্রেমের সমস্ত বৈশিষ্ট্য ধরে রাখা হয় তবে পরবর্তীকালের প্রয়োজন


18

পান্ডাস সংস্করণে 0.13 এবং বৃহত্তর সূচকের স্তরের নামগুলি অপরিবর্তনীয় (প্রকার FrozenList) এবং এটি আর সরাসরি সেট করা যায় না। আপনাকে প্রথমে Index.rename()সূচকে নতুন সূচক স্তরের নামগুলি DataFrame.reindex()প্রয়োগ করতে এবং তারপরে ডেটাফ্রেমে নতুন সূচক প্রয়োগ করতে ব্যবহার করতে হবে। উদাহরণ:

পান্ডাস সংস্করণ <0.13

df.index.names = ['Date']

পান্ডাস সংস্করণ> = 0.13 এর জন্য

df = df.reindex(df.index.rename(['Date']))

9
সত্য না! আমার পান্ডাদের সংস্করণে (0.13.1) df.index.names = ['foo'] ভাল কাজ করে!
লন্ডনরব

5
@ লন্ডনরব - `df.index.names = ['foo'] Pand এছাড়াও পান্ডার্স 0.14 দিয়ে আমার জন্য কাজ করে তা দেখার জন্য ধন্যবাদ। স্পষ্টতই এটি কেবল সংক্ষিপ্তভাবে ভাঙা হয়েছিল এবং আমি যখন এটি পরীক্ষা করেছি তখন অন্তর্ভুক্ত ছিল।
ডেভিড স্মিথ

1
উভয় indexবা columnসরাসরি নাম নির্ধারণ করা আমার জন্য উভয়ই পরিবর্তন করছে (পান্ডাস ০.০৯-এ), তবে এই পদ্ধতির সাথে নয়।
FooBar

8

আপনি Index.set_namesনিম্নলিখিত হিসাবে ব্যবহার করতে পারেন :

In [25]: x = pd.DataFrame({'year':[1,1,1,1,2,2,2,2],
   ....:                   'country':['A','A','B','B','A','A','B','B'],
   ....:                   'prod':[1,2,1,2,1,2,1,2],
   ....:                   'val':[10,20,15,25,20,30,25,35]})

In [26]: x = x.set_index(['year','country','prod']).squeeze()

In [27]: x
Out[27]: 
year  country  prod
1     A        1       10
               2       20
      B        1       15
               2       25
2     A        1       20
               2       30
      B        1       25
               2       35
Name: val, dtype: int64
In [28]: x.index = x.index.set_names('foo', level=1)

In [29]: x
Out[29]: 
year  foo  prod
1     A    1       10
           2       20
      B    1       15
           2       25
2     A    1       20
           2       30
      B    1       25
           2       35
Name: val, dtype: int64

2
এটি কি কাজ করতে পারে multiIndex? MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F'], ['Y', 'Z']], labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]], names=['Portfolio', None])এটা নামান্তর কি সম্ভব Noneকরতে measures?
ctrl-alt-

2

আপনি যদি উভয় কলাম এবং সূচকের নাম পরিবর্তনের জন্য একই ম্যাপিং ব্যবহার করতে চান তবে আপনি করতে পারেন:

mapping = {0:'Date', 1:'SM'}
df.index.names = list(map(lambda name: mapping.get(name, name), df.index.names))
df.rename(columns=mapping, inplace=True)

0
df.index.rename('new name', inplace=True)

আমার জন্য কাজটিই কেবল একমাত্র (প্যান্ডাস 0.22.0)।
ইনপ্লেস ছাড়া = সত্য, সূচকের নামটি আমার ক্ষেত্রে সেট করা নেই।


0

আপনি ব্যবহার করতে পারেন indexএবং এর columnsগুণাবলী pandas.DataFrame। দ্রষ্টব্য: তালিকার উপাদানগুলির সংখ্যা অবশ্যই সারি / কলামের সংখ্যার সাথে মেলে।

#       A   B   C
# ONE   11  12  13
# TWO   21  22  23
# THREE 31  32  33

df.index = [1, 2, 3]
df.columns = ['a', 'b', 'c']
print(df)

#     a   b   c
# 1  11  12  13
# 2  21  22  23
# 3  31  32  33
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.