পাইথন পান্ডাস: নির্বাচিত কলামটি সিরিজের পরিবর্তে ডেটাফ্রেম হিসাবে রাখুন


92

একটি পান্ডাস ডেটা ফ্রেম (বলুন df.iloc[:, 0], df['A']বা df.A, ইত্যাদি) থেকে একটি একক কলাম নির্বাচন করার সময় , ফলস্বরূপ ভেক্টর একটি একক-কলাম ডেটা ফ্রেমের পরিবর্তে স্বয়ংক্রিয়ভাবে একটি সিরিজে রূপান্তরিত হয়। তবে, আমি কিছু ফাংশন লিখছি যা একটি ইনপুট আর্গুমেন্ট হিসাবে ডেটাফ্রেম লাগে takes অতএব, আমি সিরিজের পরিবর্তে একক-কলাম ডেটাফ্রেম নিয়ে কাজ করতে পছন্দ করি যাতে ফাংশনটি ধরে নিতে পারে যে df.colums অ্যাক্সেসযোগ্য। এই মুহূর্তে আমাকে স্পষ্ট করে এরকম কিছু ব্যবহার করে সিরিজটিকে একটি ডেটা ফ্রেমে রূপান্তর করতে হবে pd.DataFrame(df.iloc[:, 0])। এটি সবচেয়ে পরিষ্কার পদ্ধতির মতো বলে মনে হচ্ছে না। সরাসরি ডেটাফ্রেম থেকে সূচকের আরও কি খুব সুন্দর উপায় আছে যাতে ফলাফলটি সিরিজের পরিবর্তে একক-কলামের ডেটাফ্রেম হয়?


6
df.iloc [:, [0]] বা ডিএফ [['এ']]; df.A কেবল একটি সিরিজ ফিরিয়ে দেবে
জেফ

উত্তর:


99

@ জেফ উল্লেখ করেছেন যে এটি করার কয়েকটি উপায় রয়েছে, তবে আমি আরও স্পষ্ট হওয়ার জন্য লোক / আইলোক ব্যবহার করার পরামর্শ দিচ্ছি (এবং আপনার কিছু অস্পষ্টের চেষ্টা করার সাথে সাথে ত্রুটিগুলি উত্থাপন করুন):

In [10]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

In [11]: df
Out[11]:
   A  B
0  1  2
1  3  4

In [12]: df[['A']]

In [13]: df[[0]]

In [14]: df.loc[:, ['A']]

In [15]: df.iloc[:, [0]]

Out[12-15]:  # they all return the same thing:
   A
0  1
1  3

শেষের দুটি পছন্দ পূর্ণসংখ্যা কলামের নামগুলির ক্ষেত্রে অস্পষ্টতা সরিয়ে দেয় (অবিকল কেন লোক / আইলোক তৈরি করা হয়েছিল)। উদাহরণ স্বরূপ:

In [16]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 0])

In [17]: df
Out[17]:
   A  0
0  1  2
1  3  4

In [18]: df[[0]]  # ambiguous
Out[18]:
   A
0  1
1  3

4
আপনাকে বিরক্ত করার জন্য দুঃখিত, তবে এটিকে ঘিরে একটি খুব দ্রুত প্রশ্ন। আমি দেখতে কিভাবে অতিরিক্ত []ফলে তোলে DataFrameএকটি পরিবর্তে Series, কিন্তু পান্ডাস ডক্সে ইন্ডেক্স সিনট্যাক্স এই ধরনের আলোচনা করা হয়? আমি কেবল সূচকের এই কৌশলটির জন্য "অফিসিয়াল" নাম নেওয়ার চেষ্টা করছি যাতে আমি সত্যিই এটি বুঝতে পারি। ধন্যবাদ!
স্পার্ক_স্প্রেড

4
" স্পার্ক_স্প্রেড পান্ডস.পিডিটা.আর। / প্যান্ডাস- ডকস / স্টটেবল / ইন্ডেক্সিং এইচটিএমএল # basics " আপনি সেই ক্রমে কলামগুলি নির্বাচন করতে [] তে কলামের একটি তালিকা পাস করতে পারেন "" এর কোনও নাম থাকলে আমি নিশ্চিত নই!
অ্যান্ডি হেডেন

হ্যাঁ মনে হচ্ছে এটির একটি নেই - তবে আমি এখন থেকে এটি ব্যবহার চালিয়ে যাব। আশ্চর্যজনক যে কতগুলি স্টাফ এপিআই এবং ডক্স উভয়কে সমাহিত করা হয়েছে। ধন্যবাদ!
স্পার্ক_স্প্রেড

এই পার্থক্যটি আমার পক্ষে দরকারী, কারণ মাঝে মাঝে আমি একটি কলাম ডেটাফ্রেম চাই তাই আমি সিরিজে অনুপলব্ধ ডেটাতে ডেটা ফ্রেম পদ্ধতি ব্যবহার করতে পারি। (আইএসআরটি প্লট পদ্ধতিটি আলাদাভাবে আচরণ করেছে)। এটি আমার জন্য একটি এপিফ্যানি ছিল যখন আমি বুঝতে পারি যে আমি একটি একক-উপাদান তালিকা ব্যবহার করতে পারি!
RufusVS

4

অ্যান্ডি হেডেন যেমন পরামর্শ দিয়েছেন, .iloc / .loc থেকে সূচক আউট (একক কলম্বিত) ডেটাফ্রেম ব্যবহার করার উপায়; আরেকটি বিষয় লক্ষণীয় হ'ল কীভাবে সূচক অবস্থানগুলি প্রকাশ করা যায়। ডেটাফ্রেম হিসাবে সূচককে আর্গুমেন্টের মানগুলি উল্লেখ করে একটি তালিকাভুক্ত সূচক লেবেল / অবস্থানগুলি ব্যবহার করুন ; এটি করতে ব্যর্থতা একটি 'pandas.core.series.Series' ফিরিয়ে দেবে

ইনপুট:

    A_1 = train_data.loc[:,'Fraudster']
    print('A_1 is of type', type(A_1))
    A_2 = train_data.loc[:, ['Fraudster']]
    print('A_2 is of type', type(A_2))
    A_3 = train_data.iloc[:,12]
    print('A_3 is of type', type(A_3))
    A_4 = train_data.iloc[:,[12]]
    print('A_4 is of type', type(A_4))

আউটপুট:

    A_1 is of type <class 'pandas.core.series.Series'>
    A_2 is of type <class 'pandas.core.frame.DataFrame'>
    A_3 is of type <class 'pandas.core.series.Series'>
    A_4 is of type <class 'pandas.core.frame.DataFrame'>

1

আপনি ব্যবহার করতে পারেন df.iloc[:, 0:1], এক্ষেত্রে ফলাফল প্রাপ্ত ভেক্টরটি একটি DataFrameএবং সিরিজ নয়।

আপনি দেখতে পারেন:

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


1

এই তিনটি পদ্ধতির উল্লেখ করা হয়েছে:

pd.DataFrame(df.loc[:, 'A'])  # Approach of the original post
df.loc[:,[['A']]              # Approach 2 (note: use iloc for positional indexing)
df[['A']]                     # Approach 3

pd.Series.to_frame () হ'ল আরেকটি পন্থা।

কারণ এটি একটি পদ্ধতি, এটি এমন পরিস্থিতিতে ব্যবহার করা যেতে পারে যেখানে উপরের দ্বিতীয় এবং তৃতীয় পদ্ধতির প্রয়োগ হয় না। বিশেষত, আপনার ডেটাফ্রেমের কোনও কলামে কিছু পদ্ধতি প্রয়োগ করার সময় এটি দরকারী এবং আপনি আউটপুটটিকে একটি সিরিজের পরিবর্তে ডেটাফ্রেমে রূপান্তর করতে চান। উদাহরণস্বরূপ, একটি বৃহত্তর নোটবুক একটি সিরিজের সুন্দর আউটপুট হবে না, কিন্তু একটি তথ্য ফ্রেম হবে।

# Basic use case: 
df['A'].to_frame()

# Use case 2 (this will give you pretty output in a Jupyter Notebook): 
df['A'].describe().to_frame()

# Use case 3: 
df['A'].str.strip().to_frame()

# Use case 4: 
def some_function(num): 
    ...

df['A'].apply(some_function).to_frame()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.