اذهب إلى المحتوى
  • 0

تعيين قيمة لخانة cell بناء على رقمها index في pandas

Mohamed Elnemr

السؤال

قمت بعمل dataframe كالتالي:

df = DataFrame(index=['A','B','C'], columns=['D','E'])

>>> df
    D    E
A  NaN  NaN
B  NaN  NaN
C  NaN  NaN

وأريد وضع قيمة في خانة معينة بناء على مكان الخانة index بحيث تظهر كالتالي:

    D    E
A  NaN  NaN
B  NaN  NaN
C  20   NaN

كيف يمكنني فعل هذا؟

تم التعديل في بواسطة Mohamed Elnemr
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يمكنك استخدام .iat / .at , لنفترض أن لديك إطار data_frame التالي

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

إذا أردنا تعديل قيمة الخلية [0 ، "A"] يمكنك استخدام أحد هذه الحلول:

df.iat[0,0] = 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

أو يمكنك استخدام الحل الآتي

df.loc[index_position, "column_name"] = some_value

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

اذا كنت تريد التعديل على ال dataframe بحيث تقوم بعمل نسخة معدلة مع ابقاء النسخة الأصلية غير معدلة يمكنك عمل التالي:

df.xs('C')['D']=20

اما اذا أردت التعديل على ال dataframe الأصلية فيمكنك استخدام الكود التالي:

df.at['C', 'D'] = 20

وكذلك يمكنك استخدام set_value كالتالي:

df.set_value('C', 'D', 20)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

إليك جميع الطرق مع مقارنة بزمن التنفيذ بينها:

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) # سوف يتم إلغاءها في قادم النسخ
%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)
"""

كما يمكنك تعديل القيم بالشكل التالي:

import pandas as pd
df = pd.DataFrame(index=['A','B','C'], columns=['D','E'])
df.D["C"]=2

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يجب أن تنتبه أن df.iloc, df.loc, df.at يتم تنفيذهم مع حالة كان index بإستخدام الكلمات كما في المثال او الأرقام، df.iloc تعمل فقط في حال كان integer index. أما df.loc و df.at يمكن أن يعملان في حالة كنت تريد الإضافة بإستخدام إسم العمود مع integer index.

في حالة كان index غير معرف فإن كل من df.loc , df.at يقومان بالإضافة في dataframe بصورة مباشرة و لكن df.iloc تقوم بإنشاء خطأ، لاحظ المثال التالي:

import numpy as np, pandas as pd

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

# الأسطر و الأعمدة غير موجودة في البيانات الأساسية بالتالي يتم  إضافتهم
df.at['D','w'] = 9000
df.loc['E','q'] = 499

# هذه الطريقة تقوم بإستخدام عبارة شرطية لفلترة البيانات و من قم الإضافة
df.at[df1['x']=='B', 'y'] = 10000
df.loc[df1['x']=='B', ['z','w']] = 10000

# إضافة قيم بإستخدام index
df.iloc[[1,2,4], 2] = 9999
df.loc[[0,'D','E'],'w'] = 7500
df.at[[0,2,"D"],'x'] = 10
df.at[:, ['y', 'w']] = 8000

df

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...