পাইথন পান্ডাস: সারি সারি একটি ডাটাফ্রেম সারি পূরণ করুন


133

কোনও pandas.DataFrameবস্তুর সাথে একটি সারি যুক্ত করার সহজ কাজটি সম্পাদন করা কঠিন বলে মনে হচ্ছে। এটি সম্পর্কিত 3 টি স্ট্যাকওভারফ্লো প্রশ্ন রয়েছে যার মধ্যে কোনও কার্যকরী উত্তর দেয় না।

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

>>> df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])
>>> df
     a    b    c    d
x  NaN  NaN  NaN  NaN
y  NaN  NaN  NaN  NaN
z  NaN  NaN  NaN  NaN

এখন, সারিগুলির মানগুলি পুনরাবৃত্তভাবে গণনা করার জন্য আমার একটি ফাংশন রয়েছে। আমি কীভাবে একটি অভিধান বা একটি দিয়ে সারিগুলির একটি পূরণ করতে পারি pandas.Series? এখানে বিভিন্ন প্রচেষ্টা ব্যর্থ হয়েছে:

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df['y'] = y
AssertionError: Length of values does not match length of index

স্পষ্টতই এটি একটি সারির পরিবর্তে একটি কলাম যুক্ত করার চেষ্টা করেছিল।

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.join(y)
AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'

খুব তথ্যহীন ত্রুটি বার্তা।

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.set_value(index='y', value=y)
TypeError: set_value() takes exactly 4 arguments (3 given)

দৃশ্যত এটি কেবল ডেটাফ্রেমে স্বতন্ত্র মান নির্ধারণের জন্য।

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.append(y)
Exception: Can only append a Series if ignore_index=True

ঠিক আছে, আমি সূচিটি উপেক্ষা করতে চাই না, অন্যথায় এখানে ফলাফল:

>>> df.append(y, ignore_index=True)
     a    b    c    d
0  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN
3    1    5    2    3

এটি মানগুলির সাথে কলামের নামগুলি সারিবদ্ধ করেছিল, তবে সারি লেবেলগুলি হারাবে।

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.ix['y'] = y
>>> df
                                  a                                 b  \
x                               NaN                               NaN
y  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z                               NaN                               NaN

                                  c                                 d
x                               NaN                               NaN
y  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z                               NaN                               NaN

এটিও খারাপভাবে ব্যর্থ হয়েছিল।

তাহলে তুমি কিভাবে এটা করেছ ?

উত্তর:


92

df['y'] একটি কলাম সেট করবে

যেহেতু আপনি একটি সারি সেট করতে চান, ব্যবহার করুন .loc

নোটটি .ixএখানে সমান, আপনার ব্যর্থ হয়েছে কারণ আপনি সারিটির প্রতিটি উপাদানকে একটি অভিধান দেওয়ার চেষ্টা করেছেন yসম্ভবত আপনি যা চান তা নয়; সিরিজে রূপান্তরিত করা পান্ডাকে বলে যে আপনি ইনপুটটি সারিবদ্ধ করতে চান (উদাহরণস্বরূপ আপনাকে তখন সমস্ত উপাদান নির্দিষ্ট করতে হবে না)

In [7]: df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])

In [8]: df.loc['y'] = pandas.Series({'a':1, 'b':5, 'c':2, 'd':3})

In [9]: df
Out[9]: 
     a    b    c    d
x  NaN  NaN  NaN  NaN
y    1    5    2    3
z  NaN  NaN  NaN  NaN

আমি দেখি. সুতরাং locডেটা ফ্রেমের বৈশিষ্ট্যটি একটি বিশেষ সংজ্ঞা __setitem__দেয় যা আমার ধারণা করা যাদুটি করে does
এক্সএপল

আপনি কি এটি একটি পাসে (যেমন কলাম, সূচক এবং y দিয়ে) তৈরি করতে পারেন?
অ্যান্ডি হেডেন

5
সুতরাং আমি যদি একবারে একটি সারি তৈরি করতে পারি তবে আমি কীভাবে ডেটা ফ্রেমটি অনুকূলভাবে তৈরি করব?
এক্সপ্লেল

df = pd.DataFrame({'y': pd.Series(y)}, columns=['a','b','c','d'], index=['x','y','z'])কাজ করার কিছু বৈকল্পিকের প্রত্যাশা ছিল ?
অ্যান্ডি হেডেন

আপনার কাছে ডিক্টের (বা তালিকা) একটি তালিকা তৈরির জন্য @ এক্সপ্ল্যাব প্রোব সবচেয়ে ভাল, তারপরে কেবল কনস্ট্রাক্টরকে পাস করুন, আরও কার্যকর হবে
জেফ

71

আমার পদ্ধতির ছিল, কিন্তু আমি গ্যারান্টি দিতে পারি না যে এটিই দ্রুততম সমাধান।

df = pd.DataFrame(columns=["firstname", "lastname"])
df = df.append({
     "firstname": "John",
     "lastname":  "Johny"
      }, ignore_index=True)

4
এটি আমার পক্ষে উজ্জ্বলতার সাথে কাজ করেছে এবং আমি এই সত্যটি পছন্দ করি যে আপনি স্পষ্ট appendকরে ডেটা ফ্রেমের ডেটা দিয়েছেন।
জনি ব্রুকস

1
মনে রাখবেন যে কলামের নাম যুক্ত করার জন্য এই উত্তরের প্রতিটি সারি প্রয়োজন। গৃহীত উত্তরের জন্য একই।
পাশুতে

আপনি যদি আগে থেকে সারির সংখ্যা না জানেন তবে এটিও কার্যকর হয়।
আয়রেন

34

এটি একটি সহজ সংস্করণ

import pandas as pd
df = pd.DataFrame(columns=('col1', 'col2', 'col3'))
for i in range(5):
   df.loc[i] = ['<some value for first>','<some value for second>','<some value for third>']`

4
শুধু জিজ্ঞাসা করতে চান, এই সিপিইউ এবং মেমরি কার্যকর?
czxttkl

1
আমি কীভাবে ডিএফের শেষ সারিটি জানব যাতে প্রতিবারের মতো আমি শেষ সারিতে যুক্ত হব?
পাশুতে

25

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

import pandas as pd
list_of_lists = []
list_of_lists.append([1,2,3])
list_of_lists.append([4,5,6])

pd.DataFrame(list_of_lists, columns=['A', 'B', 'C'])
#    A  B  C
# 0  1  2  3
# 1  4  5  6

তবে আমার কাছে যদি একাধিক সূচক থাকে তবে আমি কী করব? df1 = pd.DataFrame (list_of_lists, কলাম ['A', 'B', 'C'], সূচি = ['A', 'B']) কাজ করে না। ভুল আকার। তা কিভাবে?
পাশুতে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.