একটি অনুলিপি হিসাবে নতুন ডেটাফ্রেমে নির্দিষ্ট নির্বাচিত কলামগুলি বের করা


182

আমার কাছে 4 টি কলাম সহ একটি পান্ডাস ডেটা ফ্রেম রয়েছে এবং আমি একটি নতুন ডেটাফ্রেম তৈরি করতে চাই যেখানে কেবলমাত্র তিনটি কলাম রয়েছে। এই প্রশ্নটির অনুরূপ: একটি ডেটা ফ্রেম থেকে সুনির্দিষ্ট কলামগুলি বের করা কিন্তু প্যান্ডাসের জন্য আর নয় The

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator 

এটি করার প্যান্ডাসনিক উপায় কী?

উত্তর:


353

এটি করার একটি উপায় আছে এবং এটি বাস্তবে আর এর অনুরূপ

new = old[['A', 'C', 'D']].copy()

এখানে আপনি মূল ডেটা ফ্রেম থেকে আপনার পছন্দসই কলামগুলি নির্বাচন করছেন এবং সেগুলির জন্য একটি ভেরিয়েবল তৈরি করছেন। আপনি যদি নতুন ডেটাফ্রেমটি একেবারে সংশোধন করতে চান তবে আপনি সম্ভবত এটিকে .copy()এড়াতে ব্যবহার করতে চাইবেন SettingWithCopyWarning

একটি বিকল্প পদ্ধতি হ'ল ব্যবহার করা filterযা ডিফল্টরূপে একটি অনুলিপি তৈরি করবে:

new = old.filter(['A','B','D'], axis=1)

অবশেষে, আপনার মূল ডেটাফ্রেমে কলামগুলির সংখ্যার উপর নির্ভর করে এটি ব্যবহার করে এটি প্রকাশ করা আরও সাফল্য হতে পারে drop(এটি ডিফল্টরূপে একটি অনুলিপিও তৈরি করবে):

new = old.drop('B', axis=1)

20
একটি মাত্র কলাম অনুলিপি করা সতর্কতা: old[['A']].copy()একটি নতুন ডেটা ফ্রেম তৈরি করতে ডাবল বর্গাকার বন্ধনীগুলির প্রয়োজন। নোট যা old['A'].copy()কেবল একটি সিরিজ তৈরি করবে।
ইন্টোটেকো

19

সবচেয়ে সহজ উপায়

new = old[['A','C','D']]


3
আপনি স্পষ্টভাবে .কপি ()
সিলভাইন

এই অনুলিপিগুলি ডিফল্টরূপে।
এনগুই আল

1
@ এনগুইয়াল সহজ সূচকের আচরণ নির্দিষ্ট করা হয়নি। আপনি কোনও অনুলিপি বা ভিউ পাবেন কিনা তা জানতে পারবেন না। আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন: pandas.pydata.org/pandas-docs/stable/user_guide/…
ওলে ফাস

8

আর একটি সহজ উপায় বলে মনে হচ্ছে:

new = pd.DataFrame([old.A, old.B, old.C]).transpose()

যেখানে old.column_nameআপনাকে একটি সিরিজ দেবে আপনি যে সমস্ত কলাম-সিরিজ ধরে রাখতে চান তা একটি তালিকা তৈরি করুন এবং এটি ডেটা ফ্রেম কনস্ট্রাক্টরের কাছে প্রেরণ করুন। আকারটি সামঞ্জস্য করতে আমাদের একটি ট্রান্সপোজ করতে হবে।

In [14]:pd.DataFrame([old.A, old.B, old.C]).transpose()
Out[14]: 
   A   B    C
0  4  10  100
1  5  20   50

কাজ করে, তবে কলাম_নামে বিশেষ অক্ষর থাকলে তা নয়।
জিমঃ

ওহ সে সম্পর্কে
হিট করুন

3

জেনেরিক কার্যকরী ফর্ম

def select_columns(data_frame, column_names):
    new_frame = data_frame.loc[:, column_names]
    return new_frame

উপরে আপনার সমস্যার জন্য নির্দিষ্ট

selected_columns = ['A', 'C', 'D']
new = select_columns(old, selected_columns)

2

আপনি যদি নতুন ডেটা ফ্রেম রাখতে চান তবে:

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new=  old[['A', 'C', 'D']]

1

আমি যতদূর বলতে পারি, ফিল্টার ফাংশনটি ব্যবহার করার সময় অগত্যা আপনার অক্ষটি নির্দিষ্ট করার দরকার নেই।

new = old.filter(['A','B','D'])

হিসাবে একই ডেটাফ্রেম প্রদান করে

new = old.filter(['A','B','D'], axis=1)

1

সূচী অনুসারে কলাম:

# selected column index: 1, 6, 7
new = old.iloc[: , [1, 6, 7]].copy() 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.