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


92

আমার একটি পান্ডাস সিরিজ এসএফ আছে:

email
email1@email.com    [1.0, 0.0, 0.0]
email2@email.com    [2.0, 0.0, 0.0]
email3@email.com    [1.0, 0.0, 0.0]
email4@email.com    [4.0, 0.0, 0.0]
email5@email.com    [1.0, 0.0, 3.0]
email6@email.com    [1.0, 5.0, 0.0]

এবং আমি এটি নিম্নলিখিত ডেটা ফ্রেমে রূপান্তর করতে চাই:

index | email             | list
_____________________________________________
0     | email1@email.com  | [1.0, 0.0, 0.0]
1     | email2@email.com  | [2.0, 0.0, 0.0]
2     | email3@email.com  | [1.0, 0.0, 0.0]
3     | email4@email.com  | [4.0, 0.0, 0.0]
4     | email5@email.com  | [1.0, 0.0, 3.0]
5     | email6@email.com  | [1.0, 5.0, 0.0]

আমি এটি করার একটি উপায় খুঁজে পেয়েছি তবে আমি সন্দেহ করি যে এটি আরও দক্ষ একটি:

df1 = pd.DataFrame(data=sf.index, columns=['email'])
df2 = pd.DataFrame(data=sf.values, columns=['list'])
df = pd.merge(df1, df2, left_index=True, right_index=True)

4
পান্ডার আরও সাম্প্রতিক সংস্করণগুলিতে, এটি একটি একক reset_indexকল দিয়ে অর্জন করা যেতে পারে
cs95

উত্তর:


137

2 অস্থায়ী ডিএফএস তৈরির পরিবর্তে আপনি কেবল এটিকে ডাটাফ্রেম কনস্ট্রাক্টর ব্যবহার করে একটি ডিকের মধ্যে প্যারাম হিসাবে পাস করতে পারেন:

pd.DataFrame({'email':sf.index, 'list':sf.values})

টি উপায় df প্রয়োগ গঠন করা প্রচুর আছে, দেখুন ডক্স


আর একটি দুর্দান্ত বিকল্পটি যদি আপনার সিরিজের একই অক্ষ থাকেpd.concat([sf.index, sf.values], axis=1)
লরেন

63

to_frame () :

নিম্নলিখিত সিরিজ দিয়ে শুরু, df:

email
email1@email.com    A
email2@email.com    B
email3@email.com    C
dtype: int64

আমি সিরিজটি ডেটাফ্রেমে রূপান্তর করতে টুফ্রেম ব্যবহার করি :

df = df.to_frame().reset_index()

    email               0
0   email1@email.com    A
1   email2@email.com    B
2   email3@email.com    C
3   email4@email.com    D

এখন আপনার যা দরকার তা হ'ল কলামের নাম পরিবর্তন করে সূচী কলামের নামকরণ:

df = df.rename(columns= {0: 'list'})
df.index.name = 'index'

আপনার ডেটাফ্রেম আরও বিশ্লেষণের জন্য প্রস্তুত।

আপডেট: আমি ঠিক এই লিঙ্কটি জুড়ে এসেছি যেখানে উত্তরগুলি এখানে আমার সাথে আশ্চর্যরকমভাবে মিল রয়েছে।


4
series_obj.to_frame()কাজ! আমি এই শ্রেণীর <class 'pandas.core.frame.DataFrame'>
জনি ঝাং

4
কেন to_frame().reset_index()শুধু চেয়ে বরং ব্যবহার reset_index? আপনি এমনকি করতে পারেনreset_index(name='list')
ডাম্বলডেড

17

Series.reset_indexসঙ্গে nameযুক্তি

প্রায়শই ব্যবহারের ক্ষেত্রে উপস্থিত হয় যেখানে সিরিজটিকে ডেটা ফ্রেমে উন্নীত করা দরকার। তবে যদি সিরিজের কোনও নাম না থাকে তবে এর পরে reset_indexএমন কিছু ঘটবে,

s = pd.Series([1, 2, 3], index=['a', 'b', 'c']).rename_axis('A')
s

A
a    1
b    2
c    3
dtype: int64

s.reset_index()

   A  0
0  a  1
1  b  2
2  c  3

আপনি কলামটির নামটি "0" দেখতে পাবেন। আমরা এটি nameপরামিতি নির্দিষ্ট করে ঠিক করতে পারি ।

s.reset_index(name='B')

   A  B
0  a  1
1  b  2
2  c  3

s.reset_index(name='list')

   A  list
0  a     1
1  b     2
2  c     3

Series.to_frame

আপনি যদি কোনও কলামে সূচকটি প্রচার না করে ডেটাফ্রেম তৈরি করতে চান তবে এই উত্তরেSeries.to_frame প্রস্তাবিত হিসাবে ব্যবহার করুন । এই এছাড়াও একটি নাম পরামিতি সমর্থন করে।

s.to_frame(name='B')

   B
A   
a  1
b  2
c  3

pd.DataFrame নির্মাতা

আপনি প্যারাম Series.to_frameনির্দিষ্ট করে একই জিনিস করতে পারেন columns:

pd.DataFrame(s, columns=['B'])

   B
A   
a  1
b  2
c  3

আমি ভাবছিলাম যে এর to_frameপরিবর্তে কেউ কেন ব্যবহার করতে পারে তবে দু'টি ব্যবহারের reset_indexজন্য কি কখনও কোনও ভাল কারণ আছে? এখানে
ডাম্বলডেড

@ ডাম্বলড্যাড বেশিরভাগ ইউটিলিটি। আপনি যদি সূচী সহ একটি একক কোল ডেটাফ্রেম চান তবে টু_ফ্রেম () ব্যবহার করুন। আপনার যদি দুটি কলামের প্রয়োজন (একটি সিরিজ সূচক এবং অন্যটি সিরিজের মান থেকে from), রিসেট_ইন্ডেক্স () সহ যান।
সিএস 95

এবং যদি আমি ডেটারফ্রেম কলামের নাম হিসাবে (যেমন ট্রান্সপোজড) ব্যবহৃত সিয়ার্স সূচক দিয়ে সিরিজটি ডেটাফ্রেমে রূপান্তর করতে চাই? to_frameএটি করার পক্ষে কোনও যুক্তি আছে বলে মনে হয় না। ধন্যবাদ
হতবুদ্ধি

@ বিস্মৃত ব্যবহারের_ফ্রেমে ব্যবহার করুন ()। টি স্থানান্তর করতে টি
সিএস 95

17

এক লাইনের উত্তর হবে

myseries.to_frame(name='my_column_name')

বা

myseries.reset_index(drop=True, inplace=True)  # As needed

4

Series.to_frameএকটি রূপান্তর করতে ব্যবহার করা যেতে পারে Seriesথেকে DataFrame

# The provided name (columnName) will substitute the series name
df = series.to_frame('columnName')

উদাহরণ স্বরূপ,

s = pd.Series(["a", "b", "c"], name="vals")
df = s.to_frame('newCol')
print(df)

   newCol
0    a
1    b
2    c

1

এটি করার জন্য সম্ভবত অ-পাইথোনিক উপায় হিসাবে গ্রেড করা হয়েছে তবে এটি আপনাকে একটি লাইনে ফলাফল দেবে:

new_df = pd.DataFrame(zip(email,list))

ফলাফল:

               email               list
0   email1@email.com    [1.0, 0.0, 0.0]
1   email2@email.com    [2.0, 0.0, 0.0]
2   email3@email.com    [1.0, 0.0, 0.0]
3   email4@email.com    [4.0, 0.0, 3.0]
4   email5@email.com    [1.0, 5.0, 0.0]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.