Stack Overflow ТОП-10 асуулт: Python Pandas

1. Pandas датафрэймийн мөрөөр хэрхэн давталт хийх вэ?

Мөрөөр давталт хийн багана болгоны элементрүү хэрхэн хандах вэ?

   c1   c2
0  10  100
1  11  110
2  12  120

Хариулт:

DataFrame.iterrows ашиглан дараах байдлаар бичнэ. Гэхдээ энэ арга нь их хэмжээний өгөгдөл байгаа үед удаан уншихыг анхаарна уу.

import pandas as pd

df = pd.DataFrame({'c1': [10, 11, 12], 'c2': [100, 110, 120]})
df = df.reset_index()  

for index, row in df.iterrows():
    print(row['c1'], row['c2'])
10 100
11 110
12 120

2. Баганын тодорхой утгаар өгөгдлийг хэрхэн шүүх вэ?

Хариулт:

df.loc[df['column_name'] == some_value]
df.loc[df['column_name'].isin(some_values)]

Хэрвээ олон нөхцөл бичих тохиолдолд:

df.loc[(df['column_name'] >= A) & (df['column_name'] <= B)]
df['column_name'] >= A & df['column_name'] <= B

Жишээ: Үүсгэсэн өгөгдлийн А баганын утга “foo” байх мөрүүдийг шүүе.

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split(),
                   'C': np.arange(8), 'D': np.arange(8) * 2})
print(df)
#      A      B  C   D
# 0  foo    one  0   0
# 1  bar    one  1   2
# 2  foo    two  2   4
# 3  bar  three  3   6
# 4  foo    two  4   8
# 5  bar    two  5  10
# 6  foo    one  6  12
# 7  foo  three  7  14

print(df.loc[df['A'] == 'foo'])

Үр дүн:

     A      B  C   D
0  foo    one  0   0
2  foo    two  2   4
4  foo    two  4   8
6  foo    one  6  12
7  foo  three  7  14

3. Баганын нэрийг хэрхэн өөрчлөх вэ?

Хариулт:

df_new = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})

# эсвэл шинэ өгөгдөл үүсгэхгүйгээр үндсэн өгөгдөл дээр нэрийг өөрчилж болно 
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)

Жишээ:

df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
df

   a  b  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1)
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
df2 = df.rename(columns={'a': 'X', 'b': 'Y'}) 

df2

   X  Y  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

4. Өгөгдлөөс баганыг хэрхэн устгах вэ?

Хариулт:

df = df.drop('column_name', axis=1)

df = df.drop(columns=['column_nameA', 'column_nameB'])

Шинэ өгөгдөл үүсгэхгүйгээр дараах байдлаар мөн устгаж болно.

df.drop('column_name', axis=1, inplace=True)

Эсвэл del ашиглан дараах байдлаар мөн устгаж болно.

del df['column_name']

5. Тухайн өгөгдлийг мөрийн тоог хэрхэн гаргах вэ?

Хариулт:

len(df.index)
df.shape[0]

6. Өгөгдлөөс хэд хэдэн баганыг хэрхэн сонгох вэ?

Хариулт:

df1 = df[['a', 'b']]
df1 = df.iloc[:, 0:2]

7. Багануудын байрлалыг хэрхэн өөрчилөх вэ?

Хариулт жишээ:

Өгөгдөл

In [6]: df
Out[6]:
          0         1         2         3         4      mean
0  0.445598  0.173835  0.343415  0.682252  0.582616  0.445543
1  0.881592  0.696942  0.702232  0.696724  0.373551  0.670208
2  0.662527  0.955193  0.131016  0.609548  0.804694  0.632596
3  0.260919  0.783467  0.593433  0.033426  0.512019  0.436653
4  0.131842  0.799367  0.182828  0.683330  0.019485  0.363371
5  0.498784  0.873495  0.383811  0.699289  0.480447  0.587165
6  0.388771  0.395757  0.745237  0.628406  0.784473  0.588529
7  0.147986  0.459451  0.310961  0.706435  0.100914  0.345149
8  0.394947  0.863494  0.585030  0.565944  0.356561  0.553195
9  0.689260  0.865243  0.136481  0.386582  0.730399  0.561593

In [7]: cols = df.columns.tolist()

In [8]: cols
Out[8]: [0L, 1L, 2L, 3L, 4L, 'mean']

Эхний болон сүүлийн баганыг өөрчилөх лист үүсгэнэ:

In [12]: cols = cols[-1:] + cols[:-1]

In [13]: cols
Out[13]: ['mean', 0L, 1L, 2L, 3L, 4L]

Шинэ листээ ашиглан байрлалыг өөрчилнө.

In [16]: df = df[cols]

In [17]: df
Out[17]:
       mean         0         1         2         3         4
0  0.445543  0.445598  0.173835  0.343415  0.682252  0.582616
1  0.670208  0.881592  0.696942  0.702232  0.696724  0.373551
2  0.632596  0.662527  0.955193  0.131016  0.609548  0.804694
3  0.436653  0.260919  0.783467  0.593433  0.033426  0.512019
4  0.363371  0.131842  0.799367  0.182828  0.683330  0.019485
5  0.587165  0.498784  0.873495  0.383811  0.699289  0.480447
6  0.588529  0.388771  0.395757  0.745237  0.628406  0.784473
7  0.345149  0.147986  0.459451  0.310961  0.706435  0.100914
8  0.553195  0.394947  0.863494  0.585030  0.565944  0.356561
9  0.561593  0.689260  0.865243  0.136481  0.386582  0.730399

8. Өгөгдлийн төрлийг хэрхэн өөрчилөх вэ?

Хариулт:

# Бүх баганыг int64 төрөлрүү хөрвүүлнэ.
df = df.astype(int)

# "a" баганыг int64, "b" баганыг complex төрөлрүү хөрвүүлнэ
df = df.astype({"a": int, "b": complex})

# Series -г float16 төрөл рүү
s = s.astype(np.float16)

# Series -г String төрөл рүү
s = s.astype(str)

# Series-г картегори төрөл рүү
s = s.astype('category')

Жишээ:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df

Out[1]:
  one  two three
0   a  1.2   4.2
1   b   70  0.03
2   x    5     0

df.dtypes

Out[2]:
one      object
two      object
three    object

df[['two', 'three']] = df[['two', 'three']].astype(float)

df.dtypes

Out[3]:
one       object
two      float64
three    float64

9. Хоосон утга буюу NaN утгыг хэрхэн устгах вэ?

Хариулт:

Жишээ өгөгдөл үүсгэе.

In [24]: df = pd.DataFrame(np.random.randn(10,3))

In [25]: df.iloc[::2,0] = np.nan; df.iloc[::4,1] = np.nan; df.iloc[::3,2] = np.nan;

In [26]: df
Out[26]:
          0         1         2
0       NaN       NaN       NaN
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN

NaN утгатай мөр болгоныг устгах

In [27]: df.dropna()     #drop all rows that have any NaN values
Out[27]:
          0         1         2
1  2.677677 -1.466923 -0.750366
5 -1.250970  0.030561 -2.678622
7  0.049896 -0.308003  0.823295

Хэрвээ бүх утга нь NaN баганыг утсгах тохиолдолд

In [28]: df.dropna(how='all')     #drop only if ALL columns are NaN
Out[28]:
          0         1         2
1  2.677677 -1.466923 -0.750366
2       NaN  0.798002 -0.906038
3  0.672201  0.964789       NaN
4       NaN       NaN  0.050742
5 -1.250970  0.030561 -2.678622
6       NaN  1.036043       NaN
7  0.049896 -0.308003  0.823295
8       NaN       NaN  0.637482
9 -0.310130  0.078891       NaN

10. Pandas үр дүнг илүү олон багана, мөрүүдээр харуулахад ямар тохиргоо хийх вэ?

Хариулт:

Доорх тохиргоо нь харуулах хамгийн их мөр, багана болон өргөнийг зааж өгнө.

import pandas as pd
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

Эх сурвалж: StackOverflow

Хуваалцах:

Холбоотой нийтлэлүүд

Python нь код бичих хурд, ойлгомжтой байдлаараа алдартай. Гэхдээ мэргэжлийн хөгжүүлэгчид эдгээр богино, хэрэгцээтэй ‘hack’-уудыг ашиглан Python-г бүр илүү үр...
  • Python
  • 4 сар 2, 2025
Virtual Environment гэж юу вэ? Virtual Environment (виртуал орчин) нь Python дээр хөгжүүлэгдэх төслийн тусгайлан тохируулагдсан орчин юм. Энэ нь...
  • Python
    ,
    Software Engineering
  • 7 сар 19, 2024
Python-ы класс бол объект хандалтат программчлалын үндсэн нэгж юм. Класс нь объектуудын төлөв (Attribute) ба үйлдлүүдийг (Action) тодорхойлдог. Классыг тодорхойлохдоо...
  • Python
    ,
    Software Engineering
  • 7 сар 18, 2024