পান্ডাস ডেটা ফ্রেমের জন্য সারিটি কলামের শিরোনামে রূপান্তর করুন,


111

আমার যে ডেটা নিয়ে কাজ করতে হবে তা কিছুটা অগোছালো .. এর ডেটার ভিতরে এটির শিরোনাম রয়েছে। আমি কীভাবে বিদ্যমান প্যান্ডাস ডেটাফ্রেম থেকে একটি সারি বেছে নিতে এবং এটির (এটির পুনরায় নামকরণ) কলাম শিরোনাম তৈরি করতে পারি?

আমি এরকম কিছু করতে চাই:

header = df[df['old_header_name1'] == 'new_header_name1']

df.columns = header

উত্তর:


196
In [21]: df = pd.DataFrame([(1,2,3), ('foo','bar','baz'), (4,5,6)])

In [22]: df
Out[22]: 
     0    1    2
0    1    2    3
1  foo  bar  baz
2    4    5    6

দ্বিতীয় সারির মানগুলির সমান করতে কলামের লেবেলগুলি সেট করুন (সূচী অবস্থান 1):

In [23]: df.columns = df.iloc[1]

যদি সূচকের অনন্য লেবেল থাকে তবে আপনি দ্বিতীয় সারির সাহায্যে এটি ব্যবহার করতে পারেন:

In [24]: df.drop(df.index[1])
Out[24]: 
1 foo bar baz
0   1   2   3
2   4   5   6

সূচকটি অনন্য না হলে আপনি ব্যবহার করতে পারেন:

In [133]: df.iloc[pd.RangeIndex(len(df)).drop(1)]
Out[133]: 
1 foo bar baz
0   1   2   3
2   4   5   6

ব্যবহারের ফলে দ্বিতীয় সারির মতো একই df.drop(df.index[1])লেবেলযুক্ত সমস্ত সারি সরিয়ে ফেলা হয় । যেহেতু অ-অনন্য সূচকগুলি এ জাতীয় হোঁচট খায় (বা সম্ভাব্য বাগগুলি) হতে পারে, তাই সূচকটি অনন্য is (যদিও পান্ডাদের এটির প্রয়োজন নেই) যত্ন নেওয়া ভাল।


আপনার দ্রুত প্রতিক্রিয়া জন্য আপনাকে অনেক ধন্যবাদ! আমি শিরোনামের অবস্থানের তুলনায় সূচীর অবস্থানের স্থলে মান দিয়ে কীভাবে একটি সারিকে বেছে নিতে পারি? সুতরাং আপনার উদাহরণের জন্য যেমন .. ডিএফ.কলামগুলি = ডিএফ [ডিএফ [0] == 'ফুও']
ইকে

সমস্যাটি হ'ল একাধিক সারি হতে পারে যার মান রয়েছে "foo"। যে সমস্যা প্রায় ওয়ান ওয়ে স্পষ্টভাবে প্রথম সারি নির্বাচন করতে হয়: df.columns = df.iloc[np.where(df[0] == 'foo')[0][0]]
unutbu

আহ আমি দেখছি আপনি কেন এমনভাবে করেছিলেন। আমার ক্ষেত্রে, আমি জানি যে কেবলমাত্র একটি সারি রয়েছে যার "foo" মান রয়েছে। সুতরাং এটি ঠিক আছে। আমি কেবল এইভাবে করেছিলাম অনুমান করে এটি আপনি আমাকে উপরে যেভাবে দিয়েছেন। idx_loc = df [df [0] == 'foo']। সূচী.টোলিস্ট () [0] df.colouts = df.iloc [idx_loc]
EK

63

এটি কাজ করে (পান্ডাস v'0.19.2 '):

df.rename(columns=df.iloc[0])

22
আপনি "শিরোলেখ" সারিটি যোগ করে.drop(df.index[0])
ostrokach

আমি এটি প্রকৃত গৃহীত উত্তরের চেয়ে ভাল like আমি সংক্ষিপ্ত অনলাইন সমাধান পছন্দ করি।
জাভিয়ের

13

ডেটা ফ্রেমটি পুনরায় তৈরি করা সহজ হবে। এটি স্ক্র্যাচ থেকে কলামগুলির প্রকারেরও ব্যাখ্যা করবে।

headers = df.iloc[0]
new_df  = pd.DataFrame(df.values[1:], columns=headers)

4

আপনি পরামিতিগুলির মাধ্যমে পঠন_সিএসভি বা রিড_এইচটিএমএল কনস্ট্রাক্টরগুলিতে সারি সূচক নির্দিষ্ট করতে পারেন । এটি পূর্ববর্তী সমস্ত সারিগুলি স্বয়ংক্রিয়ভাবে ফেলে দেওয়ার সুবিধা রয়েছে যা সম্ভবত জঞ্জাল।headerRow number(s) to use as the column names, and the start of the data

import pandas as pd
from io import StringIO

In[1]
    csv = '''junk1, junk2, junk3, junk4, junk5
    junk1, junk2, junk3, junk4, junk5
    pears, apples, lemons, plums, other
    40, 50, 61, 72, 85
    '''

    df = pd.read_csv(StringIO(csv), header=2)
    print(df)

Out[1]
       pears   apples   lemons   plums   other
    0     40       50       61      72      85
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.