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