পাইথন ডিককে ডেটাফ্রেমে রূপান্তর করুন


298

আমার নীচের মতো পাইথন অভিধান রয়েছে:

{u'2012-06-08': 388,
 u'2012-06-09': 388,
 u'2012-06-10': 388,
 u'2012-06-11': 389,
 u'2012-06-12': 389,
 u'2012-06-13': 389,
 u'2012-06-14': 389,
 u'2012-06-15': 389,
 u'2012-06-16': 389,
 u'2012-06-17': 389,
 u'2012-06-18': 390,
 u'2012-06-19': 390,
 u'2012-06-20': 390,
 u'2012-06-21': 390,
 u'2012-06-22': 390,
 u'2012-06-23': 390,
 u'2012-06-24': 390,
 u'2012-06-25': 391,
 u'2012-06-26': 391,
 u'2012-06-27': 391,
 u'2012-06-28': 391,
 u'2012-06-29': 391,
 u'2012-06-30': 391,
 u'2012-07-01': 391,
 u'2012-07-02': 392,
 u'2012-07-03': 392,
 u'2012-07-04': 392,
 u'2012-07-05': 392,
 u'2012-07-06': 392}

কীগুলি ইউনিকোডের তারিখ এবং মানগুলি পূর্ণসংখ্যা হয়। তারিখগুলি এবং তাদের সম্পর্কিত মানগুলি দুটি পৃথক কলাম হিসাবে রেখে আমি এটিকে একটি পান্ডাস ডেটা ফ্রেমে রূপান্তর করতে চাই। উদাহরণ: কল 1: তারিখগুলি কল 2: তারিখভ্যালু (তারিখগুলি এখনও ইউনিকোড এবং তারিখের মানগুলি এখনও পূর্ণসংখ্যা)

     Date         DateValue
0    2012-07-01    391
1    2012-07-02    392
2    2012-07-03    392
.    2012-07-04    392
.    ...           ...
.    ...           ...

এই দিকটিতে যে কোনও সহায়তা অনেক প্রশংসিত হবে। আমাকে এটিকে সাহায্য করার জন্য আমি পান্ডাস ডক্সের সংস্থান খুঁজে পাচ্ছি না।

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

এখনও অবধি আমি ডেককে একটি সিরিজ অবজেক্টে রূপান্তরিত করার চেষ্টা করেছি কিন্তু এটি কলামগুলির মধ্যে সম্পর্ক বজায় রাখার মতো বলে মনে হচ্ছে না:

s  = Series(my_dict,index=my_dict.keys())

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

কোড পোস্ট করা হয়েছে। আমি ডিক-অফ-ডিক্টস তৈরি না করে এবং পরে প্রতিটি সারি আলাদাভাবে যুক্ত না করে ডেটাফ্রেম তৈরির উপায় আছে কিনা তা অনুসন্ধান করতে চাই।
anonuser0428

1
"ইউনিকোডের তারিখ" কী? আপনি কি কোনও আইএসও 8601 তারিখ বলতে চান?
পিটার মর্টেনসেন

উত্তর:


459

ত্রুটিটি, যেহেতু স্ক্যালার মানগুলির সাথে ডেটা ফ্রেম কনস্ট্রাক্টরকে কল করেছে (যেখানে এটি মানগুলি তালিকা / ডিক্ট / ... যেমন একাধিক কলাম রয়েছে বলে প্রত্যাশা করে):

pd.DataFrame(d)
ValueError: If using all scalar values, you must must pass an index

আপনি অভিধান থেকে আইটেমগুলি নিতে পারেন (উদাহরণস্বরূপ কী-মান জোড়া):

In [11]: pd.DataFrame(d.items())  # or list(d.items()) in python 3
Out[11]:
             0    1
0   2012-07-02  392
1   2012-07-06  392
2   2012-06-29  391
3   2012-06-28  391
...

In [12]: pd.DataFrame(d.items(), columns=['Date', 'DateValue'])
Out[12]:
          Date  DateValue
0   2012-07-02        392
1   2012-07-06        392
2   2012-06-29        391

তবে আমি মনে করি সিরিজ নির্মাণকারীকে পাস করা আরও বোধগম্য:

In [21]: s = pd.Series(d, name='DateValue')
Out[21]:
2012-06-08    388
2012-06-09    388
2012-06-10    388

In [22]: s.index.name = 'Date'

In [23]: s.reset_index()
Out[23]:
          Date  DateValue
0   2012-06-08        388
1   2012-06-09        388
2   2012-06-10        388

4
@ ব্যবহারকারী 1009091 আমি বুঝতে পারি যে ত্রুটিটি এখন কী বোঝায়, এটি মূলত "যা আমি দেখছি এটি একটি সিরিজ, সুতরাং সিরিজ কনস্ট্রাক্টর ব্যবহার করুন" বলছে।
অ্যান্ডি হেডেন

1
ধন্যবাদ - খুব সহায়ক। আপনি সম্ভবত ব্যাখ্যা করতে পারেন যে এই পদ্ধতিটি ব্যবহার করে এবং ডেটাফ্রেম.ফর্ম_ডিক্ট () ব্যবহারের মধ্যে পার্থক্য কী? আপনার পদ্ধতিটি (যা আমি ব্যবহার করেছি) = pandas.core.frame.DataFrame টাইপ করে, অন্যদিকে = শ্রেণি 'pandas.core.frame.DataFrame' টাইপ করে। কোনও সুযোগ আপনি পার্থক্যটি ব্যাখ্যা করতে পারবেন এবং যখন প্রতিটি পদ্ধতিটি উপযুক্ত? অগ্রিম ধন্যবাদ :)
ওপটাইমশ

এগুলি উভয়ই সমান, from_dictপ্রাচ্য কোয়ার্গ রয়েছে, তাই আমি ট্রান্সপোসিং এড়াতে চাইলে এটি ব্যবহার করতে পারি। from_dictহুডের সাথে কয়েকটি অপশন রয়েছে , এটি ডেটা ফ্রেম কনস্ট্রাক্টর ব্যবহার করা থেকে সত্যিই আলাদা নয়।
অ্যান্ডি হেডেন

54
আমি pandas.core.common.PandasError: DataFrame constructor not properly called!প্রথম উদাহরণ থেকে দেখছি
allthesignals

18
@ allthesignals d.items কাজ প্রায় তালিকা যোগ করে: পিডি.ডাটাফ্রেম (তালিকা (d.items ()), কলাম = ['তারিখ', 'তারিখভ্যালু'])
সিগুরডব

139

যখন কোনও অভিধানকে পান্ডাস ডেটাফ্রেমে রূপান্তরিত করা হয় যেখানে আপনি চাবিগুলি ডেটাফ্রেমের কলাম হতে এবং মানগুলি সারি মানের হতে চান, আপনি কেবল অভিধানের চারপাশে বন্ধনী রাখতে পারেন:

>>> dict_ = {'key 1': 'value 1', 'key 2': 'value 2', 'key 3': 'value 3'}
>>> pd.DataFrame([dict_])

    key 1     key 2     key 3
0   value 1   value 2   value 3

এটি আমার কিছু মাথাব্যথা বাঁচিয়েছে তাই আমি আশা করি এটি সেখানকার কাউকে সাহায্য করবে!

সম্পাদনা করুন: ইন পান্ডাস ডক্স জন্য একটি বিকল্প dataDataFrame কন্সট্রাকটর মাপদণ্ড অভিধান হাজার একটি তালিকা রয়েছে। এখানে আমরা এটিতে একটি অভিধান সহ একটি তালিকা পাস করছি।


6
হ্যাঁ আমি এটিও করেছি কিন্তু সংযোজন করতে টি। টি যুক্ত করেছি।
আন্তন ভিবিআর

1
এটি দুর্দান্ত কাজ করে তবে কেন আমাদের এটি এটি করতে হবে তা জানেন না।
হুই চেন

আমি যদি চাই যে এই কলামগুলি সূচক হিসাবে ব্যবহৃত হয়
ওম ত্রিপাঠি

102

যেমন ব্যবহার করে অন্য উত্তর সম্পর্কে ব্যাখ্যা করা হয়েছে pandas.DataFrame()এখানে সরাসরি হিসাবে আপনি যেমন ভাবেন তেমন আচরণ করবে না।

কি আপনি কি করতে পারেন ব্যবহার pandas.DataFrame.from_dictসঙ্গে orient='index':

In[7]: pandas.DataFrame.from_dict({u'2012-06-08': 388,
 u'2012-06-09': 388,
 u'2012-06-10': 388,
 u'2012-06-11': 389,
 u'2012-06-12': 389,
 .....
 u'2012-07-05': 392,
 u'2012-07-06': 392}, orient='index', columns=['foo'])
Out[7]: 
            foo
2012-06-08  388
2012-06-09  388
2012-06-10  388
2012-06-11  389
2012-06-12  389
........
2012-07-05  392
2012-07-06  392

1
renameসূচী এবং কলামগুলির নাম একবারে স্থির করতে আমরা কি কোনও পদ্ধতিতে এই চেইন করতে পারি ?
সিপ্রিয়ান টোমাইগা

4
ভাল যুক্তি. একটি উদাহরণ
হ'ল

1
আপনি পান্ডাসও নির্দিষ্ট করতে পারেন ata ডেটাফ্রেম.ফ্রম_ডিক্ট (..., প্রাচ্য = 'সূচক', কলামগুলি [[ফুও ',' বার ']), এটি উপরে তালিকাভুক্ত উত্স থেকে ।
spen.smith

ভাল কথা, এটি
পান্ডাস

69

অভিধানের আইটেমগুলি ডেটা ফ্রেম কনস্ট্রাক্টরকে দিন এবং কলামের নাম দিন। এর পরে মানগুলি Dateপেতে কলামটি বিশ্লেষণ করুন Timestamp

পাইথন 2.x এবং 3.x এর মধ্যে পার্থক্যটি দ্রষ্টব্য:

পাইথন ২.x এ:

df = pd.DataFrame(data.items(), columns=['Date', 'DateValue'])
df['Date'] = pd.to_datetime(df['Date'])

পাইথন ৩.x এ: (অতিরিক্ত 'তালিকা' প্রয়োজন)

df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
df['Date'] = pd.to_datetime(df['Date'])

3
এটি আমাকে দেয়:PandasError: DataFrame constructor not properly called!
ক্রিস নিলসন

18
@ ক্রিসনিয়েলসন আপনি সম্ভবত পাইথন 3 ব্যবহার করছেন। আপনার চেষ্টা করা উচিত:df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
ভিক্টর কেরকেজ

এটি আরও ভাল উত্তর কারণ এটি দেখায় যে পাইথন ৩
তে

22

তালিকা এবং অভিধান থেকে df

PS বিশেষত, আমি সারি-ওরিয়েন্টেড উদাহরণগুলি সহায়ক পেয়েছি; যেহেতু প্রায়শই যে রেকর্ডগুলি বাহ্যিকভাবে সংরক্ষণ করা হয়।

https://pbpython.com/pandas-list-dict.html


10

পান্ডারা ডিকাকে ডেটা ফ্রেমে রূপান্তর করার জন্য অন্তর্নির্মিত ফাংশন রয়েছে

pd.DataFrame.from_dict (dictionaryObject, ওরিয়েন্ট = 'সূচক')

আপনার ডেটার জন্য আপনি এটি নীচের মত রূপান্তর করতে পারেন:

import pandas as pd
your_dict={u'2012-06-08': 388,
 u'2012-06-09': 388,
 u'2012-06-10': 388,
 u'2012-06-11': 389,
 u'2012-06-12': 389,
 u'2012-06-13': 389,
 u'2012-06-14': 389,
 u'2012-06-15': 389,
 u'2012-06-16': 389,
 u'2012-06-17': 389,
 u'2012-06-18': 390,
 u'2012-06-19': 390,
 u'2012-06-20': 390,
 u'2012-06-21': 390,
 u'2012-06-22': 390,
 u'2012-06-23': 390,
 u'2012-06-24': 390,
 u'2012-06-25': 391,
 u'2012-06-26': 391,
 u'2012-06-27': 391,
 u'2012-06-28': 391,
 u'2012-06-29': 391,
 u'2012-06-30': 391,
 u'2012-07-01': 391,
 u'2012-07-02': 392,
 u'2012-07-03': 392,
 u'2012-07-04': 392,
 u'2012-07-05': 392,
 u'2012-07-06': 392}

your_df_from_dict=pd.DataFrame.from_dict(your_dict,orient='index')
print(your_df_from_dict)

2
এটি আসলেই খারাপ সমাধান, যেহেতু অভিধান কীগুলি সূচক হিসাবে সংরক্ষণ করে।
একজন অর্থনীতিবিদ


5

আপনি অভিধানের কীগুলি এবং মানগুলি নতুন ডেটাফ্রেমে যেমন পাস করতে পারেন তেমন:

import pandas as pd

myDict = {<the_dict_from_your_example>]
df = pd.DataFrame()
df['Date'] = myDict.keys()
df['DateValue'] = myDict.values()

5

আমার ক্ষেত্রে আমি একটি ডিকের কীগুলি এবং মানগুলি ডেটাফ্রেমের কলাম এবং মান হতে চেয়েছিলাম। সুতরাং আমার পক্ষে একমাত্র কাজটি ছিল:

data = {'adjust_power': 'y', 'af_policy_r_submix_prio_adjust': '[null]', 'af_rf_info': '[null]', 'bat_ac': '3500', 'bat_capacity': '75'} 

columns = list(data.keys())
values = list(data.values())
arr_len = len(values)

pd.DataFrame(np.array(values, dtype=object).reshape(1, arr_len), columns=columns)

5

এটিই আমার পক্ষে কাজ করেছিল, যেহেতু আমি একটি পৃথক সূচক কলাম রাখতে চেয়েছিলাম

df = pd.DataFrame.from_dict(some_dict, orient="index").reset_index()
df.columns = ['A', 'B']

3

একটি ডিককে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ডিকের কীগুলির সাথে সূচক হিসাবে এবং একটি কলাম হিসাবে মানগুলির সাথে একটি ডেটাফ্রেম প্রদান করে।

def dict_to_df(d):
    df=pd.DataFrame(d.items())
    df.set_index(0, inplace=True)
    return df

ডিক
প্রথম

3

এটি আমার পক্ষে এভাবে কাজ করেছিল:

df= pd.DataFrame([d.keys(), d.values()]).T
df.columns= ['keys', 'values']  # call them whatever you like

আশা করি এটা কাজে লাগবে


1
d = {'Date': list(yourDict.keys()),'Date_Values': list(yourDict.values())}
df = pandas.DataFrame(data=d)

যদি আপনি এর yourDict.keys()অভ্যন্তরে আবদ্ধ না হন list(), তবে আপনি প্রতিটি কলামের প্রতিটি সারিতে আপনার কী এবং মানগুলি রেখে দেবেন। এটার মত:

Date \ 0 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
1 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
2 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
3 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
4 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...

তবে যোগ করার list()পরে ফলাফলটি এরকম দেখাচ্ছে:

Date Date_Values 0 2012-06-08 388 1 2012-06-09 388 2 2012-06-10 388 3 2012-06-11 389 4 2012-06-12 389 ...


0

আমি এটি বেশ কয়েকবার চালিয়েছি এবং একটি ফাংশন থেকে আমি তৈরি করেছি এমন একটি উদাহরণ অভিধান রয়েছে get_max_Path()এবং এটি নমুনা অভিধানটি দেয়:

{2: 0.3097502930247044, 3: 0.4413177909384636, 4: 0.5197224051562838, 5: 0.5717654946470984, 6: 0.6063959031223476, 7: 0.6365209824708223, 8: 0.655918861281035, 9: 0.680844386645206}

এটি একটি ডেটাফ্রেমে রূপান্তর করতে, আমি নিম্নলিখিতগুলি চালিয়েছি:

df = pd.DataFrame.from_dict(get_max_path(2), orient = 'index').reset_index()

একটি পৃথক সূচক সহ একটি সাধারণ দুটি কলামের ডেটাফ্রেম দেয়:

index 0 0 2 0.309750 1 3 0.441318

কেবল কলামগুলি ব্যবহার করে নতুন নামকরণ করুন f.rename(columns={'index': 'Column1', 0: 'Column2'}, inplace=True)


0

আমি মনে করি আপনি অভিধান তৈরি করার সময় আপনি আপনার ডেটা ফর্ম্যাটে কিছু পরিবর্তন করতে পারেন, তবে আপনি সহজেই এটি ডেটা ফ্রেমে রূপান্তর করতে পারেন:

ইনপুট:

a={'Dates':['2012-06-08','2012-06-10'],'Date_value':[388,389]}

আউটপুট:

{'Date_value': [388, 389], 'Dates': ['2012-06-08', '2012-06-10']}

ইনপুট:

aframe=DataFrame(a)

আউটপুট: আপনার ডেটাফ্রেম হবে

সাবালাইম বা সম্ভবত এক্সেলের মতো কোথাও আপনাকে কিছু পাঠ্য সম্পাদনা ব্যবহার করতে হবে।

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