পান্ডাস ডেটা ফ্রেমে একটি সারি যুক্ত করুন


866

আমি বুঝতে পারি যে পান্ডাস সম্পূর্ণরূপে জনবহুল লোড করার জন্য ডিজাইন করা হয়েছে DataFrameতবে খালি ডেটা ফ্রেম তৈরি করতে হবে তারপরে একে একে সারি যুক্ত করা উচিত । এই কাজ করতে সবচেয়ে ভালো উপায় কি ?

আমি এটি সহ সফলভাবে একটি খালি ডেটা ফ্রেম তৈরি করেছি:

res = DataFrame(columns=('lib', 'qty1', 'qty2'))

তারপরে আমি একটি নতুন সারি যুক্ত করতে এবং এর সাথে একটি ক্ষেত্র পূরণ করতে পারি:

res = res.set_value(len(res), 'qty1', 10.0)

এটি কাজ করে তবে খুব অদ্ভুত বলে মনে হয়: - / (এটি স্ট্রিংয়ের মান যুক্ত করতে ব্যর্থ হয়)

আমি কীভাবে আমার ডেটাফ্রেমে (বিভিন্ন কলামের প্রকারের সাথে) একটি নতুন সারি যুক্ত করতে পারি?


70
নোট করুন এটি একটি বৃহত ডেটাফ্রেম তৈরির জন্য খুব অদক্ষ উপায়; আপনি যখন সারি যুক্ত করেন তখন নতুন অ্যারেগুলি তৈরি করতে হবে (বিদ্যমান ডেটার উপর অনুলিপি করা)।
ওয়েস ম্যাককিনি

5
@ ওয়েজমিসকিন্নি: থেক্স, এটি জেনে রাখা সত্যিই ভাল। বিশাল টেবিলগুলিতে কলামগুলি যুক্ত করা খুব দ্রুত ?
সর্বাধিক

4
যদি এটি আপনার পক্ষে খুব অকার্যকর হয় তবে আপনি একটি অতিরিক্ত সারি বুদ্ধিমান করতে পারেন এবং তারপরে এটি আপডেট করতে পারেন।
ব্যবহারকারী 1154664

উত্তর:


567
>>> import pandas as pd
>>> from numpy.random import randint

>>> df = pd.DataFrame(columns=['lib', 'qty1', 'qty2'])
>>> for i in range(5):
>>>     df.loc[i] = ['name' + str(i)] + list(randint(10, size=2))

>>> df
     lib qty1 qty2
0  name0    3    3
1  name1    2    4
2  name2    2    8
3  name3    2    1
4  name4    9    6


34
@ ম্যাক্সিমজি: ​​আমি দৃ upgrade়ভাবে একটি আপগ্রেড করার পরামর্শ দিচ্ছি। বর্তমান পান্ডাস সংস্করণটি 0.15.0।
ফ্রেড

44
.locসূচী কলামটি উল্লেখ করছে, সুতরাং আপনি যদি একটি সূচক দিয়ে প্রাক-বিদ্যমান ডেটাফ্রেমের সাথে কাজ করছেন যা 0 দিয়ে শুরু হওয়া পূর্ণসংখ্যার ক্রমাগত ধারা নয় (আপনার উদাহরণ হিসাবে), .locবিদ্যমান সারিগুলি ওভাররাইট করে, বা সারিগুলি সন্নিবেশ করায় , বা আপনার সূচীতে ফাঁক তৈরি করুন। বিদ্যমান ননজারো দৈর্ঘ্যের ডেটাফ্রেম সংযুক্ত করার জন্য আরও শক্তিশালী (তবে বোকা-প্রমাণ নয়) হবে: df.loc[df.index.max() + 1] = [randint(...বা @ ফুবারের পরামর্শ অনুসারে সূচিটি প্রিপোপুলেটিং।
hobs

4
@hobs df.index.max()হয় nanযখন DataFrame খালি।
ফ্লো 2 কে

4
@ হবস আমার যে সমাধানটি ভেবেছিল তা হ'ল টার্নারি অপারেটরটি ব্যবহার করা:df.loc[0 if pd.isnull(df.index.max()) else df.index.max() + 1]
ফ্লো 2 কে

472

আপনি যদি ডেটা ফ্রেমটির সামনে সমস্ত ডেটা পেতে পারেন তবে ডেটা ফ্রেমে সংযোজনের চেয়ে অনেক দ্রুত পদ্ধতি রয়েছে:

  1. অভিধানের একটি তালিকা তৈরি করুন যেখানে প্রতিটি অভিধান একটি ইনপুট ডেটা সারির সাথে সম্পর্কিত।
  2. এই তালিকা থেকে একটি ডেটা ফ্রেম তৈরি করুন।

আমার একটি অনুরূপ টাস্ক ছিল যার জন্য সারি সারি একটি ডেটা ফ্রেম সারিটিতে সংযোজন করতে 30 মিনিট সময় লেগেছে, এবং কয়েক সেকেন্ডের মধ্যে শেষ হওয়া অভিধানের তালিকা থেকে একটি ডেটা ফ্রেম তৈরি করা হয়েছিল।

rows_list = []
for row in input_rows:

        dict1 = {}
        # get input row in dictionary format
        # key = col_name
        dict1.update(blah..) 

        rows_list.append(dict1)

df = pd.DataFrame(rows_list)               

48
আমি যে কোনও পরিস্থিতিতে যেখানে আমি সমস্ত ডেটা সামনে পেতে পারি না তার জন্য এটি করার জন্যও চলে এসেছি। গতির পার্থক্য বিস্ময়কর।
চমত্কার

47
পান্ডাস ডক্স থেকে অনুলিপি করা হচ্ছে: It is worth noting however, that concat (and therefore append) makes a full copy of the data, and that constantly reusing this function can create a significant performance hit. If you need to use the operation over several datasets, use a list comprehension.( pandas.pydata.org/pandas-docs/stable/… )
থিকোনম

5
এটি দুর্দান্ত কাজ করে! আমি যখন ডেটা ফ্রেম তৈরি করেছি, ব্যতীত কলামগুলির নামগুলি সমস্তই ভুল ক্রমে ছিল ...
ব্যবহারকারীর 35359531

5
@ user5359531 আপনি সেক্ষেত্রে আদেশযুক্ত ডিক ব্যবহার করতে পারেন
শিখরদুয়া

20
@ user5359531 আপনি ম্যানুয়ালি কলামগুলি নির্দিষ্ট করতে পারেন এবং ক্রমটি সংরক্ষণ করা হবে। পিডি.ডাটাফ্রেম (সারি_ তালিকা, কলামগুলি = ['সি 1', 'সি 2', 'সি 3']) কৌশলটি
সম্পাদন

287

আপনি ব্যবহার করতে পারেন pandas.concat()বা DataFrame.append()। বিশদ এবং উদাহরণের জন্য, মার্জ করুন, যোগদান করুন এবং সংযোগ দিন দেখুন


6
হাই, সুতরাং অ্যাপেনড () বা কনক্যাট () ব্যবহার করে পদ্ধতিগুলির জন্য কী উত্তর। আমারও একই সমস্যা, তবে এখনও এটি বের করার চেষ্টা করছি।
notilas

109
এটি সঠিক উত্তর, তবে এটি খুব ভাল উত্তর নয় (প্রায় কেবল লিঙ্ক)।
jwg

5
আমার মনে হয় @ ফ্রেডের উত্তরটি আরও সঠিক। এই উত্তরটির সাথে আইআইইউসি সমস্যাটি হ'ল এটি প্রতিবার একটি সারিতে যুক্ত হওয়ার পরে অগত্যা পুরো ডেটা ফ্রেমটি অনুলিপি করে। .locএড়াতে পারে এমন পদ্ধতিটি ব্যবহার করে , বিশেষত যদি আপনি যত্নবান হন।
কেন উইলিয়ামস

7
তবে আপনি যদি ব্যবহার করতে চান তবে আপনাকে DataFrame.append()অবশ্যই নিশ্চিত করতে হবে যে আপনার সারির ডেটাও তালিকার প্রথম স্থানে একটি ডেটা ফ্রেম।
স্টিফুলিশ

200

এটি অনেক দিন হয়েছে, তবে আমিও একই সমস্যার মুখোমুখি হয়েছি। এবং এখানে অনেক আকর্ষণীয় উত্তর পেয়েছি। তাই আমি কোন পদ্ধতিটি ব্যবহার করতে হবে তা নিয়ে বিভ্রান্ত হয়ে পড়েছিলাম।

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

2019 সালে আপডেট হয়েছে প্যাকেজের নতুন সংস্করণ ব্যবহার করে । @ ফুবার মন্তব্যের পরেও আপডেট হয়েছে

স্পিড পারফরম্যান্স

  1. .Append ব্যবহার করে ( উত্তর )
  2. .Loc ব্যবহার করে ( উত্তর ) ব্যবহার করা
  3. Preallocating সহ .loc ব্যবহার ( FooBar এর উত্তর )
  4. ডিক ব্যবহার করে এবং শেষে ডেটা ফ্রেম তৈরি করুন ( শিখরদুয়ার উত্তর )

ফলাফল (সেকেন্ডে):

|------------|-------------|-------------|-------------|
|  Approach  |  1000 rows  |  5000 rows  | 10 000 rows |
|------------|-------------|-------------|-------------|
| .append    |    0.69     |    3.39     |    6.78     |
|------------|-------------|-------------|-------------|
| .loc w/o   |    0.74     |    3.90     |    8.35     |
| prealloc   |             |             |             |
|------------|-------------|-------------|-------------|
| .loc with  |    0.24     |    2.58     |    8.70     |
| prealloc   |             |             |             |
|------------|-------------|-------------|-------------|
|  dict      |    0.012    |   0.046     |   0.084     |
|------------|-------------|-------------|-------------|

এছাড়াও ধন্যবাদ দরকারী মন্তব্য @ ক্রাসসোভস্কিকে - আমি কোডটি আপডেট করেছি।

তাই আমি অভিধানের মাধ্যমে সংযোজনটি নিজের জন্য ব্যবহার করি।


কোড:

import pandas as pd
import numpy as np
import time

del df1, df2, df3, df4
numOfRows = 1000
# append
startTime = time.perf_counter()
df1 = pd.DataFrame(np.random.randint(100, size=(5,5)), columns=['A', 'B', 'C', 'D', 'E'])
for i in range( 1,numOfRows-4):
    df1 = df1.append( dict( (a,np.random.randint(100)) for a in ['A','B','C','D','E']), ignore_index=True)
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df1.shape)

# .loc w/o prealloc
startTime = time.perf_counter()
df2 = pd.DataFrame(np.random.randint(100, size=(5,5)), columns=['A', 'B', 'C', 'D', 'E'])
for i in range( 1,numOfRows):
    df2.loc[i]  = np.random.randint(100, size=(1,5))[0]
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df2.shape)

# .loc with prealloc
df3 = pd.DataFrame(index=np.arange(0, numOfRows), columns=['A', 'B', 'C', 'D', 'E'] )
startTime = time.perf_counter()
for i in range( 1,numOfRows):
    df3.loc[i]  = np.random.randint(100, size=(1,5))[0]
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df3.shape)

# dict
startTime = time.perf_counter()
row_list = []
for i in range (0,5):
    row_list.append(dict( (a,np.random.randint(100)) for a in ['A','B','C','D','E']))
for i in range( 1,numOfRows-4):
    dict1 = dict( (a,np.random.randint(100)) for a in ['A','B','C','D','E'])
    row_list.append(dict1)

df4 = pd.DataFrame(row_list, columns=['A','B','C','D','E'])
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df4.shape)

পিএস আমি বিশ্বাস করি, আমার উপলব্ধি নিখুঁত নয় এবং সম্ভবত কিছু অপ্টিমাইজেশন রয়েছে।


4
অযথা ব্যবহারের df2.index.max()জন্য .locগণ্য জটিলতা বাড়ে। সাধারণ df2.loc[i] = ...করতেন। আমার জন্য এটি সময়টি 10 ​​থেকে 8.64 এ হ্রাস করেছে
ক্র্যাসসস্কি

আপনি আমার পরীক্ষায় আমার পদ্ধতির অনুসরণ করছেন না তাই দয়া করে তালিকা থেকে আমার নামটি সরিয়ে দিন: আপনি উপযুক্ত আকারের একটি সূচক সরবরাহ করে মেমরিটিকে পূর্বনির্ধারণ করছেন না।
FooBar

@ ফুবার হাই! লেখক আমার উত্তর দেখে আপনি খুশি হলেন :) আপনি ঠিক বলেছেন, আমি এই গুরুত্বপূর্ণ বিষয়টি মিস করেছি। আপনার ফলাফলটি ভিন্ন ফলাফল দেখায় আমি আমার ফলাফল সারণির জন্য আরও একটি সারি যুক্ত করতে পছন্দ করি!
মিখাইল_সাম

@ মিখাইল_সাম দ্রুততম পদ্ধতি, ডিক্ট ব্যবহার করে আপনি কীভাবে পাইভট-টেবিলটি একটি এক্সেল ফাইলে লিখতে ব্যবহার করবেন?
ফ্যাবিওস্প্যাগেটি 11'19

1
পান্ডাস ডেটা ফ্রেমের কাছে ডিক্ট কেন আরও ভাল উপায় তা কেবল একটি অন্য মন্তব্যই ছড়িয়ে দিতে চেয়েছিলেন। টেবিলে একাধিক পৃথক উপাত্ত রয়েছে এমন একটি ডেটাসেটের সাথে আমার পরীক্ষায় পান্ডা সংযোজন পদ্ধতি ব্যবহার করে টাইপিং ধ্বংস হয়, যেখানে একটি ডিক্ট ব্যবহার করা হয় এবং কেবল এটি থেকে ডেটা ফ্রেম তৈরি করা হয়, মনে হয় মূল ডাটাটিটাইপ অক্ষত থাকবে।
ট্রাম্প্লিক্লিকস

109

আপনি যদি পূর্বে প্রবেশের সংখ্যা জানেন তবে আপনার সূচকটি সরবরাহের মাধ্যমে স্পেসটি প্রিলোকোক্ট করা উচিত (অন্য কোনও উত্তর থেকে ডেটা উদাহরণ গ্রহণ করে):

import pandas as pd
import numpy as np
# we know we're gonna have 5 rows of data
numberOfRows = 5
# create dataframe
df = pd.DataFrame(index=np.arange(0, numberOfRows), columns=('lib', 'qty1', 'qty2') )

# now fill it up row by row
for x in np.arange(0, numberOfRows):
    #loc or iloc both work here since the index is natural numbers
    df.loc[x] = [np.random.randint(-1,1) for n in range(3)]
In[23]: df
Out[23]: 
   lib  qty1  qty2
0   -1    -1    -1
1    0     0     0
2   -1     0    -1
3    0    -1     0
4   -1     0     0

গতির তুলনা

In[30]: %timeit tryThis() # function wrapper for this answer
In[31]: %timeit tryOther() # function wrapper without index (see, for example, @fred)
1000 loops, best of 3: 1.23 ms per loop
100 loops, best of 3: 2.31 ms per loop

এবং - মতামত থেকে - 6000 আকারের সাথে গতির পার্থক্য আরও বড় হয়:

অ্যারের আকার বৃদ্ধি (12) এবং সারিগুলির সংখ্যা (500) গতির পার্থক্যটিকে আরও আকর্ষণীয় করে তোলে: 313ms বনাম 2.29s


3
দুর্দান্ত উত্তর। এটি আদর্শ হওয়া উচিত যাতে সারি স্থানটি ক্রমবর্ধমানভাবে বরাদ্দ করতে না হয়।
ely

8
অ্যারের আকার বৃদ্ধি (12) এবং সারিগুলির সংখ্যা (500) গতির পার্থক্যটিকে আরও আকর্ষণীয় করে তোলে: 313ms বনাম 2.29s
টিকন

80
mycolumns = ['A', 'B']
df = pd.DataFrame(columns=mycolumns)
rows = [[1,2],[3,4],[5,6]]
for row in rows:
    df.loc[len(df)] = row

2
এই! আমি বেশ কিছুক্ষণ অনুসন্ধান করে চলেছি, এবং এটিই প্রথম পোস্ট যা সত্যিই দেখায় যে কীভাবে একটি সারিতে নির্দিষ্ট মান নির্ধারণ করা যায়! বোনাস প্রশ্ন: কলাম-নাম / মান জোড়ার সিনট্যাক্স কোনটি? আমার ধারণা এটি ডিক ব্যবহার করে অবশ্যই কিছু হতে পারে তবে আমি এটি সঠিক বলে মনে করতে পারি না।
ঝিন

3
এটি কার্যকর নয় কারণ আপনি এটি প্রসারিত করার সময় এটি পুরো ডেটা ফ্রেমটিকে অনুলিপি করে।
জলরোধী

72

দক্ষ সংযোজনের জন্য দেখুন কীভাবে একটি পান্ডাস ডেটাফ্রেমে একটি অতিরিক্ত সারি যুক্ত করতে এবং বর্ধনের সাথে সেট করা যায়

অ-বিদ্যমান কী সূচক ডেটার loc/ixউপর দিয়ে সারি যুক্ত করুন । যেমন:

In [1]: se = pd.Series([1,2,3])

In [2]: se
Out[2]: 
0    1
1    2
2    3
dtype: int64

In [3]: se[5] = 5.

In [4]: se
Out[4]: 
0    1.0
1    2.0
2    3.0
5    5.0
dtype: float64

বা:

In [1]: dfi = pd.DataFrame(np.arange(6).reshape(3,2),
   .....:                 columns=['A','B'])
   .....: 

In [2]: dfi
Out[2]: 
   A  B
0  0  1
1  2  3
2  4  5

In [3]: dfi.loc[:,'C'] = dfi.loc[:,'A']

In [4]: dfi
Out[4]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4
In [5]: dfi.loc[3] = 5

In [6]: dfi
Out[6]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4
3  5  5  5

ব্যবহারকারীরা প্রয়োগের জন্য বলেছিলেন (একটি নতুন সারি যুক্ত করুন)। এখানে আমরা একটি সংজ্ঞায়িত সূচীতে একটি সারি যুক্ত করতে বা একটি কলাম যুক্ত করতে দেখি।
গিলহর্ম ফিলিপ রেইস


এটি কার্যকর নয় কারণ এটি পুরো ডেটা ফ্রেমের অনুলিপি করে।
জলরোধী

66

ignore_indexবিকল্পটি ব্যবহার করে আপনি অভিধান হিসাবে একটি একক সারি যুক্ত করতে পারেন ।

>>> f = pandas.DataFrame(data = {'Animal':['cow','horse'], 'Color':['blue', 'red']})
>>> f
  Animal Color
0    cow  blue
1  horse   red
>>> f.append({'Animal':'mouse', 'Color':'black'}, ignore_index=True)
  Animal  Color
0    cow   blue
1  horse    red
2  mouse  black

37
আপনি উল্লেখ করতে পারেন যে এটি f.append(<stuff>)একটি নতুন অবজেক্ট তৈরি করে পরিবর্তে স্থিরভাবে বর্তমান অবজেক্টে সংযোজন করার পরিবর্তে, আপনি যদি কোনও স্ক্রিপ্টে ডেটাফ্রেমে সংযোজন করার চেষ্টা করছেন, আপনাকে অবশ্যই বলতে হবেf = f.append(<stuff>)
ব্লেয়ারজ ২৩

2
এটি জায়গায় কোনও উপায় আছে?
LOL

@তোমার কোন. দেখতে github.com/pandas-dev/pandas/issues/2801 - অন্তর্নিহিত অ্যারে যাতে তারা অনুলিপি করা আছে বাড়ানো যাবে না।
জলরোধী

46

পাইথোনিক উপায়ে, এখানে আমার উত্তর যুক্ত করুন:

res = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))
res = res.append([{'qty1':10.0}], ignore_index=True)
print(res.head())

   lib  qty1  qty2
0  NaN  10.0   NaN

26

আপনি তালিকার একটি তালিকা তৈরি করতে এবং এটি একটি ডেটাফ্রেমে রূপান্তর করতে পারেন -

import pandas as pd

columns = ['i','double','square']
rows = []

for i in range(6):
    row = [i, i*2, i*i]
    rows.append(row)

df = pd.DataFrame(rows, columns=columns)

দান

    আমি দ্বিগুণ
0 0 0 0
1 1 2 1
2 2 4 4
3 3 6 9
4 4 8 16
5 5 10 25

15

এটি ওপি প্রশ্নের উত্তর নয়, তবে @ শিখারদুয়ার উত্তরটি চিত্রিত করার জন্য এটি একটি খেলনা উদাহরণ যা আমি খুব দরকারী বলে মনে করেছি।

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

import pandas as pd 

BaseData = pd.DataFrame({ 'Customer' : ['Acme','Mega','Acme','Acme','Mega','Acme'],
                          'Territory'  : ['West','East','South','West','East','South'],
                          'Product'  : ['Econ','Luxe','Econ','Std','Std','Econ']})
BaseData

columns = ['Customer','Num Unique Products', 'List Unique Products']

rows_list=[]
for name, group in BaseData.groupby('Customer'):
    RecordtoAdd={} #initialise an empty dict 
    RecordtoAdd.update({'Customer' : name}) #
    RecordtoAdd.update({'Num Unique Products' : len(pd.unique(group['Product']))})      
    RecordtoAdd.update({'List Unique Products' : pd.unique(group['Product'])})                   

    rows_list.append(RecordtoAdd)

AnalysedData = pd.DataFrame(rows_list)

print('Base Data : \n',BaseData,'\n\n Analysed Data : \n',AnalysedData)

14

একটি সহজ এবং সুন্দর উপায় খুঁজে বের করা:

>>> df
     A  B  C
one  1  2  3
>>> df.loc["two"] = [4,5,6]
>>> df
     A  B  C
one  1  2  3
two  4  5  6

1
নোট করুন যে এটি পুরো ডেটাফ্রেমটিকে হুডের নীচে অনুলিপি করবে। অন্তর্নিহিত অ্যারেগুলি বাড়ানো যায় না তাই তাদের অনুলিপি করতে হবে।
জলরোধী

10

আপনি ডেটাফ্রেম তৈরি করতে জেনারেটর অবজেক্ট ব্যবহার করতে পারেন, যা তালিকার চেয়ে আরও মেমরির দক্ষ হবে।

num = 10

# Generator function to generate generator object
def numgen_func(num):
    for i in range(num):
        yield ('name_{}'.format(i), (i*i), (i*i*i))

# Generator expression to generate generator object (Only once data get populated, can not be re used)
numgen_expression = (('name_{}'.format(i), (i*i), (i*i*i)) for i in range(num) )

df = pd.DataFrame(data=numgen_func(num), columns=('lib', 'qty1', 'qty2'))

বিদ্যমান ডেটা ফ্রেমে কাঁচা যুক্ত করতে আপনি সংযোজন পদ্ধতিটি ব্যবহার করতে পারেন।

df = df.append([{ 'lib': "name_20", 'qty1': 20, 'qty2': 400  }])

9

একটি নতুন রেকর্ড তৈরি করুন (ডেটা ফ্রেম) এবং old_data_frame এ যুক্ত করুন । একটি নতুন_রেকার্ড (ডেটা_ফ্রেম) তৈরি করতে মানগুলির এবং সংশ্লিষ্ট কলামের নামের
তালিকা পাস করুন

new_record = pd.DataFrame([[0,'abcd',0,1,123]],columns=['a','b','c','d','e'])

old_data_frame = pd.concat([old_data_frame,new_record])

8

এখানে একটি সারি যুক্ত / যুক্ত করার উপায় pandas DataFrame

def add_row(df, row):
    df.loc[-1] = row
    df.index = df.index + 1  
    return df.sort_index()

add_row(df, [1,2,3]) 

এটি খালি বা জনবহুল পান্ডাস ডেটা ফ্রেমে একটি সারি সন্নিবেশ / সংযোজন করতে ব্যবহার করা যেতে পারে


1
এটি সূচকের সাথে অবতরণ ক্রমে যুক্ত হচ্ছে
পার্থিব রাজেন্দ্রন

5

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

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

# current data
data = {"Animal":["cow", "horse"], "Color":["blue", "red"]}

# adding a new row (be careful to ensure every column gets another value)
data["Animal"].append("mouse")
data["Color"].append("black")

# at the end, construct our DataFrame
df = pd.DataFrame(data)
#   Animal  Color
# 0    cow   blue
# 1  horse    red
# 2  mouse  black

5

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

valuestoappend = [va1,val2,val3]
res = res.append(pd.Series(valuestoappend,index = ['lib', 'qty1', 'qty2']),ignore_index = True)

4

এটি করার আরেকটি উপায় (সম্ভবত খুব পারফরম্যান্ট নয়):

# add a row
def add_row(df, row):
    colnames = list(df.columns)
    ncol = len(colnames)
    assert ncol == len(row), "Length of row must be the same as width of DataFrame: %s" % row
    return df.append(pd.DataFrame([row], columns=colnames))

আপনি এর মতো ডেটাফ্রেম শ্রেণিকেও উন্নত করতে পারেন:

import pandas as pd
def add_row(self, row):
    self.loc[len(self.index)] = row
pd.DataFrame.add_row = add_row

1

এটাকে সহজ করো. ইনপুট হিসাবে তালিকা গ্রহণ করে যা ডেটা ফ্রেমে সারি হিসাবে যুক্ত করা হবে: -

import pandas as pd  
res = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))  
for i in range(5):  
    res_list = list(map(int, input().split()))  
    res = res.append(pd.Series(res_list,index=['lib','qty1','qty2']), ignore_index=True)


0

আমরা প্রায়শই df.loc[subscript] = …একটি ডেটাফ্রেম সারিতে নির্ধারিত কনস্ট্রাক্ট দেখি। Mikhail_Sam পোস্ট benchmarks ধারণকারী অন্যান্যের মধ্যে এই কনস্ট্রাক্ট সেইসাথে পদ্ধতি ব্যবহার করে অভি এবং শেষ DataFrame তৈরি । তিনি পরেরটি সবচেয়ে দ্রুততম হিসাবে খুঁজে পেয়েছিলেন। তবে আমরা যদি df3.loc[i] = …তার কোডটিতে (পূর্বনির্ধারিত ডেটাফ্রেম সহ) প্রতিস্থাপন করি df3.values[i] = …তবে ফলাফলটি উল্লেখযোগ্যভাবে পরিবর্তিত হয়, সেই পদ্ধতিতে ডিকটি ব্যবহার করে একই পদ্ধতিতে কাজ করে। সুতরাং আমাদের আরও প্রায়ই df.values[subscript] = …বিবেচনার ব্যবহার গ্রহণ করা উচিত। তবে নোট করুন যে .valuesশূন্য-ভিত্তিক সাবস্ক্রিপ্ট গ্রহণ করে যা ডেটাফ্রেম.ইন্ডেক্স থেকে পৃথক হতে পারে।


এর একটি কোড উদাহরণ কার্যকর হবে
বাক্সেক্স

1
@ বাক্সএক্স - একটি কোড উদাহরণস্বরূপbenchmarks লিঙ্ক ( # .loc with prealloc), আরেকটি উদাহরণ প্রশ্নে হয় আমি সারি বাকি থেকে ডেটার সঙ্গে একটি পান্ডাস DataFrame প্রতিটি সারি থেকে ডেটা তুলনা করতে হবে, সেখানে গণনার গতি বাড়াতে একটি উপায় ? এবং এটির স্বীকৃত উত্তর।
আরমালি

0

pandas.DataFrame.append

ডেটাফ্রেম.এপেন্ড (স্ব, অন্য, উপেক্ষা_আইনডেক্স = মিথ্যা, যাচাই_আপনিষ্ঠতা = মিথ্যা, সাজান = মিথ্যা) Data 'ডেটাফ্রেম'

df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
df.append(df2)

উপেক্ষা_ইনডেক্সের সাথে সত্যে সেট করা:

df.append(df2, ignore_index=True)

0

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

df2=df.to_dict()
values=["s_101","hyderabad",10,20,16,13,15,12,12,13,25,26,25,27,"good","bad"] #this is total row that we are going to add
i=0
for x in df.columns:   #here df.columns gives us the main dictionary key
    df2[x][101]=values[i]   #here the 101 is our index number it is also key of sub dictionary
    i+=1

0

আপনি এটির জন্য দুটি ডেটা ফ্রেম সংযুক্ত করতে পারেন can অক্ষর সূচক (সংখ্যাসূচক নয়) সহ বিদ্যমান ডাটাফ্রেমে নতুন সারি যুক্ত করতে আমি মূলত এই সমস্যাটি জুড়ে এসেছি। সুতরাং, আমি একটি নালী () এবং একটি তালিকার সূচীতে একটি নতুন সারির জন্য ডেটা ইনপুট করি।

new_dict = {put input for new row here}
new_list = [put your index here]

new_df = pd.DataFrame(data=new_dict, index=new_list)

df = pd.concat([existing_df, new_df])

-1

এটি খালি ডেটা ফ্রেমে কোনও আইটেম যুক্ত করার যত্ন নেবে। বিষয়টি df.index.max() == nanপ্রথম সূচকের জন্য:

df = pd.DataFrame(columns=['timeMS', 'accelX', 'accelY', 'accelZ', 'gyroX', 'gyroY', 'gyroZ'])

df.loc[0 if math.isnan(df.index.max()) else df.index.max() + 1] = [x for x in range(7)]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.