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


98

আমি পান্ডে কিছুটা নতুন আমার কাছে একটি পান্ডাস ডেটা ফ্রেম যা 23 কলামে 1 সারি।

আমি এটি একটি সিরিজে রূপান্তর করতে চাই? আমি ভাবছি এটি করার সবচেয়ে অজগর উপায়টি কী?

আমি চেষ্টা করেছি pd.Series(myResults)কিন্তু এটি অভিযোগ করে ValueError: cannot copy sequence with size 23 to array axis with dimension 1। এটি গণিতের দিক থেকে এখনও "ভেক্টর" বুঝতে পারার মতো স্মার্ট নয়।

ধন্যবাদ!

উত্তর:


64

এটি গণিতের দিক থেকে এখনও "ভেক্টর" বুঝতে পারার মতো স্মার্ট নয়।

বরং বলুন যে মাত্রিক মাত্রায় পার্থক্য সনাক্ত করার পক্ষে এটি যথেষ্ট স্মার্ট। :-)

আমি মনে করি আপনি করতে পারেন এমন সহজ কাজটি অবস্থানটি ব্যবহার করে সেই সারিটি নির্বাচন করুন iloc, যা আপনাকে কলামগুলির সাথে নতুন সূচক হিসাবে মানগুলি এবং মান হিসাবে মান দেয়:

>>> df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)])
>>> df
   a0  a1  a2  a3  a4
0   0   1   2   3   4
>>> df.iloc[0]
a0    0
a1    1
a2    2
a3    3
a4    4
Name: 0, dtype: int64
>>> type(_)
<class 'pandas.core.series.Series'>

4
অথবা, অন্য উপায়:df.T
Ako

14
@ ইয়াকো: df.Tকেবল একটি ট্রান্সপোজড ডেটা ফ্রেম কোনও সিরিজ তৈরি করে না।
ডিএসএম

@ ডিএসএম এটি সত্য, df.T.iloc [0]
অ্যান্টোনিও আন্দ্রেস

ব্যবহারের সাথে একমাত্র সমস্যা df.ilocহ'ল আপনার যদি খালি df থাকে তবে এটি একটি বাড়িয়ে তুলবে IndexError। এটি এড়াতে, আপনার ডিএফ স্থানান্তর করার পরে, df.squeezeপদ্ধতিটি ব্যবহার করুন । রেফারেন্স to pandas.pydata.org/pandas-docs/stable/references/api/…
নিকোলাস ফন্টেইনে

60

আপনি একক সারি dataframe (যা এখনও একটি dataframe ফলাফল) এবং তারপর জায়গা বদল করুন করতে পারেন আলিঙ্গন একটি সিরিজ (বিপরীত মধ্যে ফলাফল to_frame)।

df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)])

>>> df.T.squeeze()  # Or more simply, df.squeeze() for a single row dataframe.
a0    0
a1    1
a2    2
a3    3
a4    4
Name: 0, dtype: int64

দ্রষ্টব্য: @ আইএনএস দ্বারা উত্থিত পয়েন্টটি সামঞ্জস্য করতে (যদিও এটি ওপির প্রশ্নে নেই), ডাটাফ্রেমের আকারের জন্য পরীক্ষা করুন। আমি ধরে নিচ্ছি যে dfএটি একটি ডেটাফ্রেম, তবে প্রান্তের কেসগুলি খালি ডেটাফ্রেম, আকৃতির একটি ডেটাফ্রেম (1, 1) এবং একাধিক সারির সাথে ডেটা ফ্রেম যার ক্ষেত্রে ব্যবহারটি তাদের পছন্দসই কার্যকারিতা কার্যকর করতে পারে।

if df.empty:
    # Empty dataframe, so convert to empty Series.
    result = pd.Series()
elif df.shape == (1, 1)
    # DataFrame with one value, so convert to series with appropriate index.
    result = pd.Series(df.iat[0, 0], index=df.columns)
elif len(df) == 1:
    # Convert to series per OP's question.
    result = df.T.squeeze()
else:
    # Dataframe with multiple rows.  Implement desired behavior.
    pass

@ থেমাচিনিস্ট দ্বারা সরবরাহ করা উত্তরের লাইনের পাশাপাশি এটি সরলও করা যেতে পারে।

if len(df) > 1:
    # Dataframe with multiple rows.  Implement desired behavior.
    pass
else:
    result = pd.Series() if df.empty else df.iloc[0, :]

11
নোট করুন যে আমি ব্যবহার করে একটি ছোট সমস্যার মধ্যে দৌড়েছি squeeze। আকারের ডেটাফ্রেমের জন্য (1, 1)এটি ফিরে আসবে, 1 দৈর্ঘ্যের একটি সিরিজ নয়, তবে একটি অদ্ভুত স্কেলার। এটি squeezeঅজানা দৈর্ঘ্যের বস্তুগুলিতে ব্যবহার করার সময় (যেমন সহ groupby) একটি হার্ড-টু-ক্যাগ বাগ to
ইয়ানস

4
"উভয় উত্পাদিত অনেকগুলি ইনডেক্স এরর আপনাকে ধন্যবাদ df.squeeze () কাজ যখন df.iloc [:, 0] & df.ix [0]!"
অন্তঃপ্রেরণা

4
আর কেনই বা বিপরীত হয় to_frameনা to_seriesবা pd.Series(df)...?
জ্বিন

4
আপনার প্রয়োজন নেই.T
এলজেহেল্জ

4
@ ই্যানস যুক্তিটি পাস করুন df.squeeze(axis=0)বা df.squeeze(axis=1)(আপনি যে অক্ষের উপরে সংরক্ষণ করতে চান তার উপর নির্ভর করে) তা এড়াতে
নিকোলাস ফন্টেইন

33

আপনি এই দুটি পদ্ধতির একটি ব্যবহার করে আপনার ডেটাফ্রেম কাটা দিয়ে সিরিজটি পুনরুদ্ধার করতে পারেন:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html

import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.random.randn(1,8))

series1=df.iloc[0,:]
type(series1)
pandas.core.series.Series

4

অন্য উপায় -

মনে করুন যে MyResult হ'ল ডেটা ফ্রেম যা আপনার ডেটা 1 কোল এবং 23 টি সারি আকারে ধারণ করে

// label your columns by passing a list of names
myResult.columns = ['firstCol']

// fetch the column in this way, which will return you a series
myResult = myResult['firstCol']

print(type(myResult))

অনুরূপ ফ্যাশনে, আপনি একাধিক কলামের সাথে ডেটাফ্রেম থেকে সিরিজ পেতে পারেন।


3

আপনি স্ট্যাক () ব্যবহার করতে পারেন

df= DataFrame([list(range(5))], columns = [“a{}”.format(I) for I in range(5)])

আপনি df চালানোর পরে চালান:

df.stack()

আপনি সিরিজ আপনার ডেটাফ্রেম প্রাপ্ত


0
data = pd.DataFrame({"a":[1,2,3,34],"b":[5,6,7,8]})
new_data = pd.melt(data)
new_data.set_index("variable", inplace=True)

এটি উপাত্তের কলামের নাম হিসাবে সূচী সহ একটি ডেটাফ্রেম দেয় এবং সমস্ত ডেটা "মান" কলামে উপস্থিত থাকে


4
স্ট্যাক ওভারফ্লোতে স্বাগতম! কিভাবে এই প্রশ্নের উত্তর দেয়? আপনার কোড প্রশ্নটি জিজ্ঞাসার মতো একটি সিরিজ
ফেরায় না
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.