ভেরিয়েবলের মানগুলি থেকে পান্ডাস ডেটা ফ্রেম তৈরি করা "ভ্যালুএররার: সমস্ত স্কেলারের মান ব্যবহার করে, আপনাকে অবশ্যই একটি সূচক পাস করতে হবে"


368

এটি একটি সাধারণ প্রশ্ন হতে পারে তবে এটি কীভাবে করা যায় তা আমি বুঝতে পারি না। আসুন বলি যে আমার নীচে দুটি ভেরিয়েবল রয়েছে।

a = 2
b = 3

আমি এটি থেকে একটি ডেটা ফ্রেম তৈরি করতে চাই:

df2 = pd.DataFrame({'A':a,'B':b})

এটি একটি ত্রুটি উত্পন্ন করে:

মান মূল্য: সমস্ত স্কেলারের মান ব্যবহার করা হলে আপনাকে অবশ্যই একটি সূচক পাস করতে হবে

আমি এটি চেষ্টাও করেছি:

df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()

এটি একই ত্রুটি বার্তা দেয়।

উত্তর:


568

ত্রুটি বার্তাটি বলে যে আপনি যদি স্কেলারের মানগুলি অতিক্রম করে থাকেন তবে আপনাকে একটি সূচক পাস করতে হবে। সুতরাং আপনি কলামগুলির জন্য স্কেলারের মানগুলি ব্যবহার করতে পারবেন না - উদাহরণস্বরূপ একটি তালিকা ব্যবহার করুন:

>>> df = pd.DataFrame({'A': [a], 'B': [b]})
>>> df
   A  B
0  2  3

অথবা স্কেলারের মান ব্যবহার করুন এবং একটি সূচক পাস করুন:

>>> df = pd.DataFrame({'A': a, 'B': b}, index=[0])
>>> df
   A  B
0  2  3

7
সম্ভবত এটি কারণ পাইথনের একটি তালিকার আইটেমগুলির ক্রম স্থির থাকে তবে অভিধানে আইটেমগুলির ক্রম হয় না। আপনি একটি খালি অভিধান সহ একটি ডেটা ফ্রেম ইনস্ট্যান্ট করতে পারেন। নীতিগতভাবে আমি মনে করি যে এখানে দেখানো একটি একক সারি ডেটাফ্রেমও অভিধান থেকে তৈরি করা ঠিক হবে কারণ আদেশের কোনও গুরুত্ব নেই (তবে এটি কার্যকর করা হয়নি)। তবে একাধিক সারির সাহায্যে পান্ডারা ডেটা ফ্রেম তৈরি করতে সক্ষম হবেন না কারণ এটি জানেন না যে কোন আইটেম একই সারির অন্তর্ভুক্ত।
আলেকজান্ডার

2
@ ভিটালিআইসিয়েভ - সেক্ষেত্রে ডেটাফ্রেম সারিটির (প্রদত্ত অভিধান দ্বারা উপস্থাপিত) কোনও সূচক নেই (এমনকি কোনও অন্তর্নিহিত শব্দেরও নয়)। একটি সহজ সমাধান হ'ল অভিধানটি কোনও তালিকার মধ্যে গুটিয়ে রাখা, যার "প্রাকৃতিক সূচক" থাকে। যে কেউ দাবি করতে পারে যে যদি কেবল একটি অভিধান দেওয়া হয় (মোড়কের তালিকা ব্যতীত), তবে ধরে নিন index=0, তবে এটি দুর্ঘটনাজনিত অপব্যবহারের কারণ হতে পারে (এই ভেবে যে কোনও একক অভিধান একাধিক সারি ডেটাফ্রেম তৈরি করতে পারে)
ওরি

এই লিঙ্কে বেশ কয়েকটি সমাধান eulertech.wordpress.com/2017/11/28/…
জেসন গোল

এর কারণ হ'ল ডেটাফ্রেমগুলি দ্বি-মাত্রিক ডেটা (অর্থাত্ ওপি'র দুটি ভেরিয়েবলের সারি) রাখা বোঝায়। আপনি যদি সূচকটি -> মান জোড় (অভিধানের মতো) ধরে রাখতে চান তবে রবের পরামর্শ অনুসারে আপনার একটি সিরিজ ব্যবহার করা উচিত ।
ডানুকার

এটি একক নমুনা / সারি ডেটাফ্রেম, সুতরাং সূচক = [0] যৌক্তিক ধারণা দেয়; তবে আপনি এটিকে সূচক = [100] হিসাবেও ব্যবহার করতে পারেন, যা কাজ করে। প্রশ্ন: সূচকে যৌক্তিকভাবে বর্ধিতভাবে অর্ডার দেওয়ার কথা নয়, পাইথন কেন সূচি হেরফেরের অনুমতি দেয়?
সুমন্ত লাজারাস

65

আপনার কাছে pd.DataFrame.from_recordsইতিমধ্যে অভিধানটি উপস্থিত থাকলে আপনি যেটি আরও সুবিধাজনক তা ব্যবহার করতে পারেন :

df = pd.DataFrame.from_records([{ 'A':a,'B':b }])

আপনি চাইলে সূচকও সেট করতে পারেন:

df = pd.DataFrame.from_records([{ 'A':a,'B':b }], index='A')

27
এই উত্তরটি আমার পক্ষে কাজ করে না - from_record ব্যবহার করার সময় আমি একই ত্রুটি বার্তাটি পাই।
ডেভ কিয়েলপিনস্কি 21 '45

ডেভ, আপনি কোডটির টুকরোটি চেষ্টা করেছেন (অবশ্যই একটি এবং খ সংজ্ঞায়িত)? আপনি কি এখনও ত্রুটির বার্তা পান? আপনি পোস্ট করতে পারেন?
ফ্যাক্স

12
@ ডেভিকিলপিনস্কি আপনি সম্ভবত বন্ধনী যুক্ত করতে ভুলে গেছেন?
ডেনিস

এটি কলামের নাম হিসাবে ডিক কী ব্যবহার করবে। কীভাবে সূচকে কী সেট করবেন?
মিঙ্গচাউ

@ ডেভকিয়েলপিনস্কি, দয়া করে পরীক্ষা করে দেখুন যে আপনি "থেকে_রেকার্ডস" পদ্ধতিতে কোনও তালিকা পাস করেছেন কিনা ; অন্যথায় এটি কাজ করবে না এবং আপনি অভিধানে ডেটাফ্রেমকে কল করার সময় একই ত্রুটি বার্তা পাবেন।
মাইরান

55

আপনাকে প্রথমে একটি পান্ডাস সিরিজ তৈরি করতে হবে। দ্বিতীয় পদক্ষেপটি পান্ডাস সিরিজকে পান্ডাস ডেটাফ্রেমে রূপান্তর করা।

import pandas as pd
data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()

এমনকি আপনি একটি কলামের নাম সরবরাহ করতে পারেন।

pd.Series(data).to_frame('ColumnName')

1
এটি আমার পক্ষে কাজ করেছে। আমার অভিধানে পূর্ণসংখ্যা কী এবং নাদারের মান রয়েছে।
StatsSorceress

pd.Series(data).to_frame('ColumnName')সংক্ষিপ্ত, যদিও এই সমতুল্য সম্ভবত আরও সরাসরি:pd.DataFrame.from_dict(data, orient='index', columns=['ColumnName'])
অ্যালেক্স এফ

29

আপনি আপনার অভিধানটি তালিকায় মোড়ানোর চেষ্টা করতে পারেন

my_dict = {'A':1,'B':2}

pd.DataFrame([my_dict])

   A  B
0  1  2

8

হয়তো সিরিজ আপনার প্রয়োজনীয় সমস্ত ফাংশন সরবরাহ করবে:

pd.Series({'A':a,'B':b})

ডেটাফ্রেমকে সিরিজের সংগ্রহ হিসাবে ভাবা যেতে পারে তাই আপনি করতে পারেন:

  • একাধিক সিরিজকে একটি ডেটা ফ্রেমে সংযুক্ত করা ( এখানে বর্ণিত হিসাবে )

  • বিদ্যমান ডেটা ফ্রেমে সিরিজ ভেরিয়েবল যুক্ত করুন ( উদাহরণস্বরূপ )


7

পান্ডাস ডেটা ফ্রেম কলামগুলির মান হিসাবে আপনাকে পুনরাবৃত্তিগুলি সরবরাহ করতে হবে:

df2 = pd.DataFrame({'A':[a],'B':[b]})

6

নাম্পার অ্যারেগুলিতে আমার একই সমস্যা ছিল এবং সমাধানগুলি তাদের সমতল করার জন্য:

data = {
    'b': array1.flatten(),
    'a': array2.flatten(),
}

df = pd.DataFrame(data)

3

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

import pandas as pd

alphabets = {'A': 'a', 'B': 'b'}
index = [0]
alphabets_df = pd.DataFrame(alphabets, index=index)
print(alphabets_df)

যদিও তালিকার একটি অভিধানের জন্য সূচকের প্রয়োজন নেই, একই ধারণা তালিকার একটি অভিধানে প্রসারিত করা যেতে পারে:

planets = {'planet': ['earth', 'mars', 'jupiter'], 'length_of_day': ['1', '1.03', '0.414']}
index = [0, 1, 2]
planets_df = pd.DataFrame(planets, index=index)
print(planets_df)

অবশ্যই তালিকাগুলির অভিধানের জন্য, আপনি কোনও সূচি ছাড়াই ডেটা ফ্রেম তৈরি করতে পারেন:

planets_df = pd.DataFrame(planets)
print(planets_df)

3

আপনি চেষ্টা করতে পারেন:

df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')

'প্রাচ্য' আর্গুমেন্টের ডকুমেন্টেশন থেকে: পাস করা ডিকের কীগুলি যদি ফলাফল ডেটা ফ্রেমের কলাম হয় তবে 'কলাম' (ডিফল্ট) পাস করুন। অন্যথায় যদি কীগুলি সারি হওয়া উচিত তবে 'সূচক' পাস করুন।


আপনার প্রশ্ন / উত্তর সঠিকভাবে সম্পাদনা করতে এবং ফর্ম্যাট করতে দয়া করে বিন্যাসকরণ সরঞ্জামগুলি ব্যবহার করুন। বাক্য মধ্যে কোড হিসাবে ফর্ম্যাট করা হয় code হতে জন্য খুবই গুরুত্বপূর্ণ শব্দ সাহসী , ক্ষুদ্রতর গুরুত্বপূর্ণ onces ইটালিক এছাড়াও তালিকা ব্যবহার প্রয়োজনে
জলহস্তী

এটি জিজ্ঞাসিত প্রশ্নের সমাধান করে না, এটি কাঙ্ক্ষিতের চেয়ে আলাদা ফলাফল দেয়।
কেন উইলিয়ামস

3

কাজের ফাঁকে ফাঁকে যাদু। সমস্ত যুক্তি বাইরে।

ত্রুটি বার্তা "ValueError: If using all scalar values, you must pass an index"বলছে আপনাকে অবশ্যই একটি সূচি পাস করতে হবে।

এর অর্থ এই নয় যে কোনও সূচি পাস করার ফলে পান্ডাস আপনাকে যা করতে চান তা করে

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

a = 2
b = 3
df2 = pd.DataFrame({'A':a,'B':b}, index=[1])

    A   B
1   2   3

একটি বৃহত্তর সূচক পাস:

df2 = pd.DataFrame({'A':a,'B':b}, index=[1, 2, 3, 4])

    A   B
1   2   3
2   2   3
3   2   3
4   2   3

একটি সূচক সাধারণত কোনও ডেটাফ্রেম দ্বারা স্বয়ংক্রিয়ভাবে উত্পন্ন হয় যখন কিছুই দেওয়া হয় না। তবে পান্ডারা জানেন না যে কত সারি রয়েছে 2এবং 3আপনি কী চান। তবে আপনি এটি সম্পর্কে আরও সুস্পষ্ট হতে পারেন

df2 = pd.DataFrame({'A':[a]*4,'B':[b]*4})
df2

    A   B
0   2   3
1   2   3
2   2   3
3   2   3

যদিও ডিফল্ট সূচক 0 ভিত্তিক।

আমি ডেটাফ্রেমগুলি তৈরি করার সময় সবসময় তালিকার একটি অভিধান ডেটাফ্রেম কনস্ট্রাক্টরের কাছে দেওয়ার পরামর্শ দিই। অন্যান্য বিকাশকারীদের পক্ষে এটি পড়া সহজ। পান্ডাদের কাছে প্রচুর পরিমাণে সতর্কতা রয়েছে, আপনার কোড পড়ার জন্য অন্য বিকাশকারীদের সেগুলির সমস্ত বিশেষজ্ঞের কাছে তৈরি করবেন না।


3

ইনপুটটি রেকর্ডের একটি তালিকা হতে হবে না - এটি পাশাপাশি একটি একক অভিধান হতে পারে:

pd.DataFrame.from_records({'a':1,'b':2}, index=[0])
   a  b
0  1  2

যা এর সমান বলে মনে হচ্ছে:

pd.DataFrame({'a':1,'b':2}, index=[0])
   a  b
0  1  2

2

এটি কারণ একটি ডেটাফ্রেমের দুটি স্বজ্ঞাত মাত্রা রয়েছে - কলাম এবং সারি।

আপনি কেবল অভিধান কী ব্যবহার করে কলামগুলি নির্দিষ্ট করছেন।

আপনি যদি কেবলমাত্র একটি মাত্রিক ডেটা নির্দিষ্ট করতে চান তবে একটি সিরিজ ব্যবহার করুন!


0

অভিধানে ডেটা ফ্রেমে রূপান্তর করুন

col_dict_df = pd.Series(col_dict).to_frame('new_col').reset_index()

কলামকে নতুন নাম দিন

col_dict_df.columns = ['col1', 'col2']

-2

আপনার যদি একটি অভিধান থাকে তবে আপনি নীচের কোডের লাইন সহ একটি পান্ডাস ডেটা ফ্রেমে রূপান্তর করতে পারেন:

pd.DataFrame({"key": d.keys(), "value": d.values()})

এটি কাজ করে, তবে আইএমএইচও এটি খুব বেশি অর্থবোধ করে না <কোড> `<! - ভাষা: ল্যাং-পিআই -> ফল_কাউন্ট = ডিফল্টডিক্ট (ইনট) ফল_কাউন্ট [" আপেল "] = 10 টি ফল_কাউন্ট [" কলা "] = 21 পিডি.ডাটা ফ্রেম ({"কী": ফল_কাউন্ট.কিজ (), "মান": ফল_কাউন্ট.মূল্য ()}) আউট: কী মান 0 (কলা, আপেল) (21, 10) 1 (কলা, আপেল) (21, 10) <কোড>
এমিটার

-3

কেবল একটি তালিকায় ডিকটি পাস করুন:

a = 2
b = 3
df2 = pd.DataFrame([{'A':a,'B':b}])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.