শব্দের তালিকাতে পান্ডাস ডেটা ফ্রেম


165

আমার কাছে নিম্নলিখিত ডেটা ফ্রেম রয়েছে:

গ্রাহক আইটেম 1 আইটেম 2 আইটেম 3
1 আপেল দুধ টমেটো
2 জল কমলা আলু
৩ টি আমের আমের চিপস

যা আমি এটি সারিতে প্রতি অভিধানের তালিকায় অনুবাদ করতে চাই

rows = [{'customer': 1, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
    {'customer': 2, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
    {'customer': 3, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]

2
স্ট্যাক ওভারফ্লোতে স্বাগতম! আমি আপনার কোডের নমুনাটি 4 টি স্পেস দিয়ে লিখেছি যাতে এটি যথাযথভাবে রেন্ডার হয় - দয়া করে ফর্ম্যাটিংয়ের আরও তথ্যের জন্য সম্পাদনা সহায়তা দেখুন।
বাইটহ্যামস্টার

উত্তর:


189

সম্পাদন করা

জন গাল্ট তাঁর উত্তরে যেমন উল্লেখ করেছেন , আপনার পরিবর্তে সম্ভবত এটি ব্যবহার করা উচিত df.to_dict('records')। এটি ম্যানুয়ালি ট্রান্সপোর্ট করার চেয়ে দ্রুত।

In [20]: timeit df.T.to_dict().values()
1000 loops, best of 3: 395 µs per loop

In [21]: timeit df.to_dict('records')
10000 loops, best of 3: 53 µs per loop

আসল উত্তর

df.T.to_dict().values()নীচের মত ব্যবহার করুন :

In [1]: df
Out[1]:
   customer  item1   item2   item3
0         1  apple    milk  tomato
1         2  water  orange  potato
2         3  juice   mango   chips

In [2]: df.T.to_dict().values()
Out[2]:
[{'customer': 1.0, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
 {'customer': 2.0, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
 {'customer': 3.0, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]

2
প্রতিটি গ্রাহকের জন্য অনেক সারি থাকা ডেটাফ্রেমের ক্ষেত্রে কী সমাধান হবে?
আজিজ

2
আমি যখন ব্যবহার করি তখন আমি df.T.to_dict().values()সাজানোর
হুসেন


219

ব্যবহার df.to_dict('records')- বাহ্যিকভাবে স্থানান্তর না করে আউটপুট দেয়।

In [2]: df.to_dict('records')
Out[2]:
[{'customer': 1L, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
 {'customer': 2L, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
 {'customer': 3L, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]

2
ফলাফল তালিকার প্রতিটি প্রবেশের সূচকের মান অন্তর্ভুক্ত করতে আমি কীভাবে এটি পরিবর্তন করব?
গ্যাব্রিয়েল এল। অলিভিরা

5
@ গ্যাব্রিয়েল এল.আলিভেরা আপনি df.reset_index () করতে পারেন_ডিক্ট ('রেকর্ডস')
ওয়ে মা মা

প্রতিটি ক্ষেত্রেই কি কলামগুলির ক্রম সংরক্ষিত আছে ফলাফল ফলাফলের মধ্যে নবম এন্ট্রি কি সর্বদা নবম কলামে থাকে?
ক্লিব

@ ক্লাবে i.e. is the nth entry in the resulting list always also the nth column?নবম কলাম বা নবম সারি রয়েছে?
নওমান না

14

জন গাল্টের উত্তরের এক্সটেনশন হিসাবে -

নিম্নলিখিত ডেটা ফ্রেমের জন্য,

   customer  item1   item2   item3
0         1  apple    milk  tomato
1         2  water  orange  potato
2         3  juice   mango   chips

আপনি যদি সূচকের মানগুলি সহ অভিধানের একটি তালিকা পেতে চান তবে আপনি এর মতো কিছু করতে পারেন,

df.to_dict('index')

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

{0: {'customer': 1, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
 1: {'customer': 2, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
 2: {'customer': 3, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}}

1

আপনি যদি কেবল একটি কলাম নির্বাচন করতে আগ্রহী হন তবে এটি কাজ করবে।

df[["item1"]].to_dict("records")

নীচেগুলি কাজ করবে না এবং একটি টাইপরর তৈরি করে: অসমর্থিত প্রকার:। আমি বিশ্বাস করি এটি এর কারণ এটি একটি সিরিজ একটি ডিককে রূপান্তরিত করার চেষ্টা করছে, ডেটা ফ্রেমকে ডিককে রূপান্তর করতে পারে না।

df["item1"].to_dict("records")

আমার কেবল একটি কলাম নির্বাচন করার এবং এটিটিকে মূল হিসাবে কলামের নামের সাথে ডিক্টের তালিকায় রূপান্তর করার প্রয়োজন ছিল এবং আমি এটিকে ভাগ করে নিই বলে কিছুটা ভাগ করে নিই।

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