ইনডেক্স ব্যবহার করে পান্ডাস ডেটা ফ্রেমে নির্দিষ্ট কক্ষের জন্য মান সেট করুন


476

আমি একটি পান্ডাস ডেটা ফ্রেম তৈরি করেছি

df = DataFrame(index=['A','B','C'], columns=['x','y'])

এবং এটি পেয়েছি

    XY
একটি NaN NAN
বি এন এন এন
সি এনএন এনএএন


তারপরে আমি নির্দিষ্ট কক্ষে মান নির্ধারণ করতে চাই, উদাহরণস্বরূপ সারি 'সি' এবং কলাম 'এক্স'। আমি এই জাতীয় ফলাফল পাওয়ার প্রত্যাশা করেছি:

    XY
একটি NaN NAN
বি এন এন এন
সি 10 নাএন

এই কোড সহ:

df.xs('C')['x'] = 10

কিন্তু বিষয়বস্তু dfপরিবর্তন হয়নি। এটি আবার কেবল NaNডেটাফ্রেমে।

কোন পরামর্শ?


29
'চেইনড ইনডেক্সিং' ( df['x']['C']) ব্যবহার করবেন না , ব্যবহার করুন df.ix['x','C']
ইয়ারিভ

3
সূচক অ্যাক্সেসের ক্রমটি হওয়া দরকার: dataframe[column (series)] [row (Series index)]যেখানে অনেক লোক (নিজেকে সহ) dataframe[row][column]অর্ডারটিতে বেশি অভ্যস্ত । মতলব ও আর প্রোগ্রামার হিসাবে আমার উত্তরসূরী আমার কাছে আরও স্বজ্ঞাত বোধ করে তবে
পান্ডরা

1
আমি এটি চেষ্টা করেছিলাম, তবে আমি x এবং অন্য একটি কলামের নাম সি যুক্ত করে শেষ করেছি আপনাকে প্রথমে সারিটি করতে হবে তারপরে কলামটি। সুতরাং df.ix ['সি', 'এক্স'] = 10
ম্যাথু

5
@ ইয়ারিভের মন্তব্যে সতর্কতা: 0.20.0 থেকে শুরু করে .ix সূচককে আরও কঠোর .iloc এবং .loc সূচকগুলির পক্ষে বঞ্চিত করা হয়। pandas.pydata.org/pandas-docs/stable/generated/… । df.at দেখে মনে হচ্ছে এটি চারপাশে লেগে রয়েছে।
জেফেল

উত্তর:


591

রুকটেকের উত্তর ,, df.set_value('C', 'x', 10)আমি নীচের প্রস্তাবিত বিকল্পগুলির চেয়ে অনেক দূরে এবং দ্রুত। তবে, এটি অবমূল্যায়নের জন্য স্থগিত করা হয়েছে

এগিয়ে যাওয়া, প্রস্তাবিত পদ্ধতিটি হ'ল.iat/.at


কেন df.xs('C')['x']=10কাজ করে না:

df.xs('C')ডিফল্টরূপে, ডেটার অনুলিপি সহ একটি নতুন ডেটাফ্রেম প্রদান করে

df.xs('C')['x']=10

শুধুমাত্র এই নতুন ডেটাফ্রেমে পরিবর্তন করে।

df['x']dfডেটা ফ্রেমের একটি ভিউ ফেরত দেয়, তাই

df['x']['C'] = 10

dfনিজেই পরিবর্তন করে।

সতর্কতা : কখনও কখনও কোনও অপারেশন কোনও অনুলিপি বা দর্শন দেয় কিনা তা অনুমান করা শক্ত। এই কারণে ডক্স "চেইনড ইনডেক্সিং" এর সাথে অ্যাসাইনমেন্ট এড়ানো পরামর্শ দেয়


সুতরাং প্রস্তাবিত বিকল্প হয়

df.at['C', 'x'] = 10

যা নেই সংশোধন df


In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 µs per loop

In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 µs per loop

In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 µs per loop

সেখানে যেমন জিনিস আছে df.xমধ্যে এপিআই । আপনি কি বুঝাতে চাচ্ছিলেন?
smci

3
@ এসএমসিআই: 'x'হ'ল একটি কলামের নাম df। কলামের মান সহ df.xএকটি প্রদান Seriesকরে x। আমি এটিকে পরিবর্তন করব df['x']যেহেতু এই স্বরলিপিটি কোনও কলামের নাম (ডট স্বীকৃতির বিপরীতে) দিয়ে কাজ করবে এবং আমি মনে করি এটি আরও পরিষ্কার।
আনটবু

1
আমি জানতাম যে, আমি ভেবেছিলাম আপনি বলছিলেন df.xপাশাপাশি কিছু অজানা নতুন পদ্ধতি ছিলdf.xs, df.ix
স্মি

df.xs(..., copy=True)একটি অনুলিপি ফেরত দেয়, এবং এটি ডিফল্ট আচরণ। df.xs(..., copy=False)আসলটি ফেরত দেয়।
smci

7
রক্ষণাবেক্ষণকারীদের মতে, এটি কোনও মান নির্ধারণ করার প্রস্তাবিত উপায় নয়। দেখুন stackoverflow.com/a/21287235/1579844 এবং আমার উত্তর।
ইয়ারিভ

224

আপডেট: .set_valueপদ্ধতিটি অবচয় করা হতে চলেছে । .iat/.atভাল প্রতিস্থাপন, দুর্ভাগ্যক্রমে পান্ডগুলি সামান্য ডকুমেন্টেশন সরবরাহ করে


এটি করার দ্রুততম উপায় হ'ল সেট_ভ্যালু ব্যবহার করা । এই পদ্ধতিটি পদ্ধতির চেয়ে 100 ডলার গতিযুক্ত .ix। উদাহরণ স্বরূপ:

df.set_value('C', 'x', 10)


5
এটি এর চেয়েও ভাল df['x']['C'] = 10
ALH

6
1000 লুপগুলি, প্রতি লুপে 3: 195 এর মধ্যে সেরা "ডিএফ ['এক্স'] ['সি'] = 10" 1000 লুপ, প্রতি লুপে 3: 310 µ এস সেরা 'ডিএফ.িক্স [' সি ',' এক্স '] = 10 "1000 লুপগুলি, প্রতি লুপে 3: 189 of এসের সেরা" ডিএফ.এক্সএস ('সি', কপি = মিথ্যা) ['x'] = 10 "1000 লুপ, প্রতি লুপে 3: 7.22 of এস সেরা " ডিএফ.সেট_মূল্য ('সি', 'এক্স', 10) "
propjk007

1
এটি কি ডেটাফ্রেমে নতুন সারি / করল যুক্ত করার জন্য কাজ করে?
st.ph.n

হ্যাঁ এটি করে (প্যান্ডাস 0.16.2 এর জন্য)
রুকটেক

এটির কোনও মান সেট করতে এটি ব্যবহার করা কি সম্ভব df=df.append(df.sum(numeric_only=True),ignore_index=True)?
সিটিআরএল-ওলট - মুছে দিন

94

আপনি .locএখানে বর্ণিত হিসাবে শর্তযুক্ত লুকও ব্যবহার করতে পারেন :

df.loc[df[<some_column_name>] == <condition>, [<another_column_name>]] = <value_to_add>

যেখানে <some_column_nameকলাম আপনি না পরীক্ষা করতে চান <condition>বিরুদ্ধে পরিবর্তনশীল এবং <another_column_name>কলাম আপনি যোগ করতে চান হয় (একটি নতুন কলাম অথবা এক ইতিমধ্যেই বিদ্যমান যে হতে পারে)। <value_to_add>আপনি সেই কলাম / সারিটিতে যোগ করতে চান এমন মান।

এই উদাহরণটি হাতছাড়া প্রশ্নটির সাথে সঠিকভাবে কাজ করে না তবে শর্তের ভিত্তিতে কেউ নির্দিষ্ট মান যুক্ত করতে চাইলে এটি কার্যকর হতে পারে।


8
দ্বিতীয় কলামটি বন্ধনীতে থাকা দরকার, অন্যথায় সমস্ত কলাম মান সহ ওভাররাইট করা হবে। এটি পছন্দ করুন:df.loc[df['age']==3, ['age-group']] = 'toddler'
পাইজেই

<some_column_name> যখন আমার সূচক হয় (ইউনিটসটাইম সূচক বলে) তখন আমি এটি কাজ করতে পারি না এবং আমি এমন টাইমস্ট্যাম্প যুক্ত করার চেষ্টা করছি যা এখনও প্রস্থান করে না (অর্থাত্ একটি নতুন টাইমস্ট্যাম্প পড়া)। কোন চিন্তা?
yeliabsalohcin

সূচক এবং ঘর মানগুলির উপর নির্ভর করে কোনও মান পরিবর্তন করা সম্ভব?
বিএনডি

@ বিএনডি আমি নিশ্চিত নই, তবে আপনি এই আপাত সমস্যাটি ঘিরে ফেলতে পারেন তবে একই মান দিয়ে অন্য কলামের সাথে সূচক কলামটি কেবল অনুলিপি করতে পারেন? সংক্ষিপ্ত উত্তরটি আমি জানি না।
ব্লেয়ারজ 23

উপরের উত্তরটি দেখুন ইয়েলিয়াবসালোহসিন।
ব্লেয়ারজ 23

40

মান নির্ধারণের প্রস্তাবিত উপায় (রক্ষণাবেক্ষণকারীদের মতে) হ'ল:

df.ix['x','C']=10

'চেইনড ইনডেক্সিং' ( df['x']['C']) ব্যবহার করা সমস্যার কারণ হতে পারে।

দেখা:



নিখুঁত কাজ করে! যদিও এটি কখনও কখনও অবমূল্যায়ন করা হবে!
পাভলোস পোনস

35

ব্যবহার করার চেষ্টা করুন df.loc[row_index,col_indexer] = value


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

22

এটিই আমার পক্ষে কাজ করেছে!

df.loc['C', 'x'] = 10

.loc এখানে আরও জানুন ।


হয়নি .locপ্রতিস্থাপন .iat/.at?
গ্যাব্রিয়েল ফেয়ার

1
atঅনুরূপ loc, এতে উভয়ই লেবেল-ভিত্তিক লুকআপ সরবরাহ করে। আপনার atযদি কেবল ডেটাফ্রেম বা সিরিজে কোনও একক মান পেতে বা সেট করতে হয় তবে ব্যবহার করুন ।
প্যাডাস

আমার সূচক উপাদানগুলি সংখ্যাসূচক থাকাকালীন এটি আমার পক্ষে ভাল লাগছিল।
ক্রিস্টোফার জন

এটি সংখ্যাসূচক এবং স্ট্রিং সূচকগুলির মিশ্রণের জন্য কাজ করে না।
Seanny123

12

.iat/.atভাল সমাধান। ধরুন আপনার কাছে এই সাধারণ ডেটা ফ্রেম রয়েছে:

   A   B   C
0  1   8   4 
1  3   9   6
2  22 33  52

আমরা যদি ঘরের মানটি সংশোধন করতে চাই তবে আপনি [0,"A"]সেই সমাধানগুলির মধ্যে একটি ব্যবহার করতে পারেন:

  1. df.iat[0,0] = 2
  2. df.at[0,'A'] = 2

এবং এখানে কীভাবে iatঘরের মূল্য নির্ধারণ এবং সেট করতে ব্যবহার করতে হয় তার একটি সম্পূর্ণ উদাহরণ :

def prepossessing(df):
  for index in range(0,len(df)): 
      df.iat[index,0] = df.iat[index,0] * 2
  return df

y_train এর আগে:

    0
0   54
1   15
2   15
3   8
4   31
5   63
6   11

y_train প্রিপোসেসিং ফাংশন কল করার পরে যা iatপ্রতিটি ঘরের মান 2 দিয়ে গুণতে হয়:

     0
0   108
1   30
2   30
3   16
4   62
5   126
6   22

7

মান সেট করতে, ব্যবহার করুন:

df.at[0, 'clm1'] = 0
  • ভেরিয়েবল সেট করার জন্য দ্রুততম প্রস্তাবিত পদ্ধতি।
  • set_value, ix অবচয় করা হয়েছে।
  • কোনও সতর্কতা নয়, বিপরীতে ilocএবংloc

1
আমি ঠিক একই সিদ্ধান্তে উঠে এসেছি ।
prosti

6

আপনি ব্যবহার করতে পারেন .iloc

df.iloc[[2], [0]] = 10

এই পদ্ধতিটি বেশ কয়েকটি মানকে সমর্থন করে না বলে মনে হয়, যেমন df.iloc[[2:8], [0]] = [2,3,4,5,6,7]পদ্ধতিটি df.loc()স্থানীয়ভাবে করে।
strpeter

1
নিখুঁত সতর্কতা ছাড়াই নিখুঁতভাবে কাজ করে!
পাভলোস পোনস


4

set_value() অবচয় করা হয়।

0.23.4 রিলিজ থেকে শুরু করে পান্ডারা " ভবিষ্যতের ঘোষণা দেয় " ...

>>> df
                   Cars  Prices (U$)
0               Audi TT        120.0
1 Lamborghini Aventador        245.0
2      Chevrolet Malibu        190.0
>>> df.set_value(2, 'Prices (U$)', 240.0)
__main__:1: FutureWarning: set_value is deprecated and will be removed in a future release.
Please use .at[] or .iat[] accessors instead

                   Cars  Prices (U$)
0               Audi TT        120.0
1 Lamborghini Aventador        245.0
2      Chevrolet Malibu        240.0

এই পরামর্শ বিবেচনা করে, কীভাবে সেগুলি ব্যবহার করবেন সে সম্পর্কে এখানে একটি বিক্ষোভ দেখানো হয়েছে:

  • সারি / কলাম পূর্ণসংখ্যার অবস্থান অনুসারে

>>> df.iat[1, 1] = 260.0
>>> df
                   Cars  Prices (U$)
0               Audi TT        120.0
1 Lamborghini Aventador        260.0
2      Chevrolet Malibu        240.0
  • সারি / কলাম লেবেল দ্বারা

>>> df.at[2, "Cars"] = "Chevrolet Corvette"
>>> df
                  Cars  Prices (U$)
0               Audi TT        120.0
1 Lamborghini Aventador        260.0
2    Chevrolet Corvette        240.0

তথ্যসূত্র:


3

পূর্ণসংখ্যা এবং স্ট্রিং দ্বারা সূচিযুক্ত ডেটা ফ্রেমের জন্য এখানে সমস্ত ব্যবহারকারীর দ্বারা সরবরাহিত বৈধ সমাধানগুলির সংক্ষিপ্তসার।

df.iloc, df.loc এবং df.at উভয় প্রকারের ডেটা ফ্রেমের জন্য কাজ করে, df.iloc কেবল সারি / কলাম সংখ্যার সূচকগুলির সাথে কাজ করে, df.loc এবং df.at কলামের নাম এবং / অথবা পূর্ণসংখ্যার সূচকগুলি ব্যবহার করে মান নির্ধারণের জন্য সমর্থন করে ।

যখন নির্দিষ্ট সূচকটি বিদ্যমান না থাকে, তখন df.loc এবং df.at উভয়ই সদ্য সন্নিবেশ করা সারি / কলামগুলিকে বিদ্যমান ডেটা ফ্রেমে সংযুক্ত করে তবে df.iloc "সূচিপত্র: অবস্থানিক সূচকগুলি সীমার বাইরে থাকে"। পাইথন ২.7 এবং ৩.7 এ পরীক্ষিত একটি কার্যকারী উদাহরণ নিম্নরূপ:

import numpy as np, pandas as pd

df1 = pd.DataFrame(index=np.arange(3), columns=['x','y','z'])
df1['x'] = ['A','B','C']
df1.at[2,'y'] = 400

# rows/columns specified does not exist, appends new rows/columns to existing data frame
df1.at['D','w'] = 9000
df1.loc['E','q'] = 499

# using df[<some_column_name>] == <condition> to retrieve target rows
df1.at[df1['x']=='B', 'y'] = 10000
df1.loc[df1['x']=='B', ['z','w']] = 10000

# using a list of index to setup values
df1.iloc[[1,2,4], 2] = 9999
df1.loc[[0,'D','E'],'w'] = 7500
df1.at[[0,2,"D"],'x'] = 10
df1.at[:, ['y', 'w']] = 8000

df1
>>> df1
     x     y     z     w      q
0   10  8000   NaN  8000    NaN
1    B  8000  9999  8000    NaN
2   10  8000  9999  8000    NaN
D   10  8000   NaN  8000    NaN
E  NaN  8000  9999  8000  499.0

3

আমি পরীক্ষা করে দেখলাম এবং আউটপুটটি df.set_valueখুব দ্রুত গতিতে এসেছে, তবে সরকারী পদ্ধতিটি df.atএটির পক্ষে দ্রুততম অবহিত উপায় হিসাবে দেখায়।

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(100, 100))

%timeit df.iat[50,50]=50 # ✓
%timeit df.at[50,50]=50 #  ✔
%timeit df.set_value(50,50,50) # will deprecate
%timeit df.iloc[50,50]=50
%timeit df.loc[50,50]=50

7.06 µs ± 118 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
5.52 µs ± 64.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
3.68 µs ± 80.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
98.7 µs ± 1.07 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
109 µs ± 1.42 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

নোট করুন এটি একটি একক কক্ষের মান নির্ধারণ করছে। ভেক্টরগুলির জন্য locএবং ilocতারা ভেক্টরাইজড হওয়ায় আরও ভাল বিকল্প হওয়া উচিত।


3

শর্ত সহ সূচকটি ব্যবহার করার একটি উপায় হ'ল প্রথমে আপনার শর্ত পূরণ করে এমন সমস্ত সারিগুলির সূচক পাওয়া এবং তারপরে কেবল একাধিক উপায়ে সেই সারি সূচকগুলি ব্যবহার করুন

conditional_index = df.loc[ df['col name'] <condition> ].index

উদাহরণ শর্ত যেমন

==5, >10 , =="Any string", >= DateTime

তারপরে আপনি এই সারি সূচকগুলি বিভিন্নভাবে ব্যবহার করতে পারেন

  1. শর্তসাপেক্ষে_আইডেক্সের জন্য একটি কলামের মান প্রতিস্থাপন করুন
df.loc[conditional_index , [col name]]= <new value>
  1. শর্তসাপেক্ষে_আইডেক্সের জন্য একাধিক কলামের মান প্রতিস্থাপন করুন
df.loc[conditional_index, [col1,col2]]= <new value>
  1. শর্তসাপেক্ষে_আইডেক্স সংরক্ষণ করার একটি সুবিধা হ'ল আপনি একই সারি সূচক সহ অন্য কলামে একটি কলামের মান নির্ধারণ করতে পারেন
df.loc[conditional_index, [col1,col2]]= df.loc[conditional_index,'col name']

এটি সমস্ত সম্ভব কারণ .index সূচকের একটি অ্যারে ফেরত দেয় যা সরাসরি ঠিকানা দিয়ে ব্যবহার করতে পারে তাই এটি বারবার ট্র্যাভারসালগুলি এড়িয়ে চলে।


সারি পরিবর্তন সম্পর্কে কি?
FabioSpaghetti

শুধু ব্যবহার করেন, df.loc [conditional_index,] = <নতুন মান> এটি নতুন মান সারির সব কলাম যা শর্ত সন্তুষ্ট মধ্যে প্রতিস্থাপন করবে
আতা Jutt


1

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

  • প্রতিটি সারির জন্য নতুন ডেটাফ্রেম তৈরি করুন এবং ...
    • ... এটি সংযোজন (13.0 গুলি)
    • ... এটি (13.1 গুলি)
  • প্রথমে অন্য নতুন পাত্রে সমস্ত নতুন সারি সঞ্চয় করুন, একবার নতুন ডেটাফ্রেমে রূপান্তর করুন এবং সংযোজন করুন ...
    • ধারক = তালিকার তালিকা (2.0 গুলি)
    • ধারক = তালিকার অভিধান (1.9 গুলি)
  • পুরো ডেটাফ্রেম প্রিলোকলোক করুন, নতুন সারি এবং সমস্ত কলামগুলিতে পুনরাবৃত্তি করুন এবং ব্যবহারটি পূরণ করুন
    • ... (0.6 সে) এ
    • ... সেট_ভ্যালু (0.4 সে)

পরীক্ষার জন্য, 100,000 সারি এবং 1,000 কলাম এবং এলোমেলো নিমপি মান সমন্বিত একটি বিদ্যমান ডেটাফ্রেম ব্যবহার করা হয়েছিল। এই ডেটাফ্রেমে 100 টি নতুন সারি যুক্ত করা হয়েছিল।

কোড নীচে দেখুন:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 21 16:38:46 2018

@author: gebbissimo
"""

import pandas as pd
import numpy as np
import time

NUM_ROWS = 100000
NUM_COLS = 1000
data = np.random.rand(NUM_ROWS,NUM_COLS)
df = pd.DataFrame(data)

NUM_ROWS_NEW = 100
data_tot = np.random.rand(NUM_ROWS + NUM_ROWS_NEW,NUM_COLS)
df_tot = pd.DataFrame(data_tot)

DATA_NEW = np.random.rand(1,NUM_COLS)


#%% FUNCTIONS

# create and append
def create_and_append(df):
    for i in range(NUM_ROWS_NEW):
        df_new = pd.DataFrame(DATA_NEW)
        df = df.append(df_new)
    return df

# create and concatenate
def create_and_concat(df):
    for i in range(NUM_ROWS_NEW):
        df_new = pd.DataFrame(DATA_NEW)
        df = pd.concat((df, df_new))
    return df


# store as dict and 
def store_as_list(df):
    lst = [[] for i in range(NUM_ROWS_NEW)]
    for i in range(NUM_ROWS_NEW):
        for j in range(NUM_COLS):
            lst[i].append(DATA_NEW[0,j])
    df_new = pd.DataFrame(lst)
    df_tot = df.append(df_new)
    return df_tot

# store as dict and 
def store_as_dict(df):
    dct = {}
    for j in range(NUM_COLS):
        dct[j] = []
        for i in range(NUM_ROWS_NEW):
            dct[j].append(DATA_NEW[0,j])
    df_new = pd.DataFrame(dct)
    df_tot = df.append(df_new)
    return df_tot




# preallocate and fill using .at
def fill_using_at(df):
    for i in range(NUM_ROWS_NEW):
        for j in range(NUM_COLS):
            #print("i,j={},{}".format(i,j))
            df.at[NUM_ROWS+i,j] = DATA_NEW[0,j]
    return df


# preallocate and fill using .at
def fill_using_set(df):
    for i in range(NUM_ROWS_NEW):
        for j in range(NUM_COLS):
            #print("i,j={},{}".format(i,j))
            df.set_value(NUM_ROWS+i,j,DATA_NEW[0,j])
    return df


#%% TESTS
t0 = time.time()    
create_and_append(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))

t0 = time.time()    
create_and_concat(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))

t0 = time.time()    
store_as_list(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))

t0 = time.time()    
store_as_dict(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))

t0 = time.time()    
fill_using_at(df_tot)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))

t0 = time.time()    
fill_using_set(df_tot)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))

0

আপনি যদি পুরো সারিটির জন্য নয়, কেবল কয়েকটি কলামের জন্য মানগুলি পরিবর্তন করতে চান:

x = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
x.iloc[1] = dict(A=10, B=-10)

0

সংস্করণ 0.21.1 থেকে আপনি .atপদ্ধতিটিও ব্যবহার করতে পারেন । এখানে .locউল্লিখিত হিসাবে কিছু পার্থক্য রয়েছে - পান্ডাস .at বনাম .লোক , তবে একক মান প্রতিস্থাপনের ক্ষেত্রে এটি দ্রুত


0

হ্যাঁ, আপনার প্রশ্নটি ['x', সি] এ এনএএন রূপান্তর করতে 10 মানকে রূপান্তর করবে

উত্তরটা হচ্ছে..

df['x'].loc['C':]=10
df

বিকল্প কোড হয়

df.loc['C':'x']=10
df

-4

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

src_df = pd.read_sql_query(src_sql,src_connection)
for index1, row1 in src_df.iterrows():
    for index, row in vertical_df.iterrows():
        src_df.set_value(index=index1,col=u'etl_load_key',value=etl_load_key)
        if (row1[u'src_id'] == row['SRC_ID']) is True:
            src_df.set_value(index=index1,col=u'vertical',value=row['VERTICAL'])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.