Интихоби сатрҳо
Барои чӣ сатрҳоро интихоб мекунем
Барои ҳисобот кам иттифоқ меафтад, ки ҳамаи сабтҳо якбора лозим шаванд. Бояд таҷҳизоти дорои тавоноии мувофиқ, ҳодисаҳои давраи муайян ё ҳуҷҷатҳои дорои калимаи лозим дар ном боқӣ монанд. Филтркунӣ тавсифи «кадом сабтҳо лозиманд»-ро ба шарти санҷишшаванда табдил медиҳад. Сатрҳоро ба рӯйхати нав дастӣ нусха кардан лозим намешавад.
Воситаи асосии pandas маска аст: барои ҳар сатр True ё False медиҳад. Аввал шарти одӣ месозем, баъд чанд шартро мепайвандем ва сутунҳои лозимро интихоб мекунем. Ба ҳадҳои фосила, тартиби сатрҳо ва ҳолате, ки ягон сабт мувофиқ нест, диққат диҳед.
1. Шарт маска месозад
Муқоисаи сутун бо адад барои ҳар қимат иҷро мешавад. Натиҷа Series-и ҳамдароз ва дорои ҳамон индекс аст. Маска дар df[...] танҳо сатрҳои дорои True-ро нигоҳ медорад. Тамғаҳои аслӣ мемонанд: филтркунӣ натиҷаро худкор аз нав рақамгузорӣ намекунад.
import pandas as pd
df = pd.DataFrame({
"device": ["A", "B", "C", "D"],
"watts": [20, 60, 40, 80],
"zone": ["X", "Y", "X", "Y"],
}, index=[10, 20, 30, 40])
mask = df["watts"] >= 40
print(mask.tolist())
print(df[mask]["device"].tolist())
print(df[mask].index.tolist())
Натиҷа:
[False, True, True, True]
['B', 'C', 'D']
[20, 30, 40]
2. Якчанд шарт
Барои Series оператори & маънои «ва», | маънои «ё» ва ~ маънои инкорро дорад. Ҳар муқоисаро ба қавс гиред: вагарна авлавияти амалҳо маънои ифодаро дигар мекунад ё хато медиҳад. and ва or як қимати мантиқиро интизоранд, аммо маска якбора чанд қимат дорад.
Шарти «тавоноӣ камаш 40 ва минтақа X» ҳар ду аломати як сатрро месанҷад. Шарти «ё» сатрро нигоҳ медорад, агар камаш як қисм иҷро шавад. Инкор ҷойи True ва False-ро иваз мекунад.
print(df[(df["watts"] >= 40) & (df["zone"] == "X")]["device"].tolist())
print(df[(df["watts"] < 40) | (df["zone"] == "Y")]["device"].tolist())
print(df[~df["zone"].isin(["Y"])]["device"].tolist())
Натиҷа:
['C']
['A', 'B', 'D']
['A', 'C']
3. Фосила ва рӯйхати қиматҳои иҷозашуда
between(left, right) бо нобаёнӣ ҳар ду ҳадро дар бар мегирад. Барои «қатъиян байни ҳадҳо» inclusive="neither" диҳед. isin(values) узвияти дақиқро месанҷад: минтақаи X бо X мувофиқ аст, на бо қисми сатри дигар. Ин аз занҷири дарози муқоисаҳо бо | содатар ва фаҳмотар аст.
Номи майдонҳо ва навъи қиматҳо бояд ба ҷадвал мувофиқ бошанд: адади 40 ва сатри "40" қиматҳои гуногунанд. Агар баъди хондани CSV шарт ғайричашмдошт кор накунад, dtypes-ро санҷед.
print(df[df["watts"].between(40, 60)]["device"].tolist())
print(df[df["watts"].between(40, 60, inclusive="neither")].empty)
print(df[df["device"].isin(["A", "C"])]["watts"].tolist())
Натиҷа:
['B', 'C']
True
[20, 40]
4. loc сатрҳо ва сутунҳоро интихоб мекунад
loc ду қисми бо вергул ҷудошуда дорад: аввал сатрҳо, баъд сутунҳо. Дар қисми аввал маска ва дар қисми дуюм ном ё рӯйхати номҳо меистад. Ин имкон медиҳад, ки шакли лозими натиҷа якбора гирифта шавад. Барои мавқеъҳо iloc ҳаст: буриши 0:2 мавқеъҳои 0 ва 1-ро мегирад, вале 2-ро не.
Дар ин ҷадвал тамғаҳои сатрҳо аз 10 сар мешаванд. Пас loc[20] тамғаи 20 ва iloc[1] сатри дуюм аст. Онҳо тасодуфан як сабтро нишон медиҳанд, аммо қоидаҳояшон фарқ мекунад.
print(df.loc[df["zone"] == "Y", ["device", "watts"]])
print(df.loc[20, "device"], df.iloc[1, 0])
print(df.iloc[0:2, 0].tolist())
Натиҷа:
device watts
20 B 60
40 D 80
B B
['A', 'B']
5. Тағйири ячейкаҳои интихобшуда
Барои тағйир додани ҷадвали аслӣ як бахшидан тавассути loc истифода баред. Қисми рост ҳам метавонад Series бошад: pandas онро аз рӯйи индекси сатрҳои интихобшуда мувофиқ мекунад. Барои намоиш нусхаи ҷадвалро гирифта, тавоноиро танҳо дар минтақаи X зиёд мекунем. copy()-и ошкоро барои ҷадвали мустақил қулай аст.
Маска дар дохил чӣ гуна кор мекунад
Маска мисли қайдҳои назди сатрҳои рӯйхат аст. Pandas сатрҳои дорои True-ро меёбад ва қиматҳои онҳоро аз сутунҳои лозим мегирад. Агар маска Series бошад, тамғаҳояш ҳам муҳиманд. Маскаи ҷадвали дигар бо индекси номувофиқ метавонад хатои мувофиқкунӣ диҳад. Беҳтар аст шартро аз ҳамон DataFrame созед, ки филтр мекунед.
changed = df.copy()
changed.loc[changed["zone"] == "X", "watts"] = changed["watts"] + 5
print(changed["watts"].tolist())
print(df["watts"].tolist())
Натиҷа:
[25, 60, 45, 80]
[20, 60, 40, 80]
6. Ҷустуҷӯ дар сатрҳо ва натиҷаи холӣ
Дастрасгари .str амалҳоро барои ҳар матни сутун медиҳад. lower ҳарфҳоро хурд, startswith оғози матнро месанҷад ва len аломатҳоро мешуморад. contains бо нобаёнӣ ифодаҳои мунтазамро мефаҳмад: нуқта ҳар аломатро ифода мекунад. Барои ҷустуҷӯи айнан матн regex=False, барои фарқ накардани ҳарфҳо case=False ва барои номувофиқ шуморидани матни гумшуда na=False диҳед.
Баъди филтркунӣ empty-ро санҷед, агар барои набудани сабт ҷавоби махсус лозим бошад. Дарҳол iloc[0] нагиред: натиҷаи холӣ сатри аввал надорад.
names = pd.Series(["Report.A", "report B", None])
print(names.str.lower().tolist())
print(names.str.startswith("Report", na=False).tolist())
print(names.str.len().tolist())
print(names.str.contains(".", regex=False, na=False).tolist())
result = df.loc[df["watts"] > 100, "device"]
print(result.empty, len(result))
Натиҷа:
['report.a', 'report b', None]
[True, False, False]
[8.0, 8.0, nan]
[True, False, False]
True 0
Барои шартҳои ададии хонданбоб query мавҷуд аст. Дар сатри дархост and иҷозат дорад; ин забони алоҳидаи ифодаҳост, на истифодаи одии and барои Series. Дархости зерин ба маскаи мувофиқ баробар аст. Номи сутуни дорои фосила дар дархост нохунакҳои чаппа талаб мекунад.
print(df.query("watts >= 40 and zone == 'X'")["device"].tolist())
Натиҷа:
['C']
Хатоҳои маъмул ва ислоҳи онҳо
andбайни маскаҳо.(df["watts"] > 20) and (df["zone"] == "X")хатои номуайянии қимати мантиқӣ медиҳад.and-ро бо&иваз карда, қавсҳоро нигоҳ доред.- Фаромӯш кардани қавсҳо.
df["watts"] > 20 & df["watts"] < 70ҳамчун ду муқоисаи мустақил хонда намешавад. Дуруст:(df["watts"] > 20) & (df["watts"] < 70). - Бахшидани занҷирӣ.
df[df["zone"] == "X"]["watts"] = 0метавонад объекти мобайниро тағйир диҳад ва огоҳӣ медиҳад. Нависед:df.loc[df["zone"] == "X", "watts"] = 0. - Ҷустуҷӯи нуқтаи одӣ бе танзим.
names.str.contains(".")қариб ҳар матни ғайрихолиро меёбад. Барои худи нуқтаregex=Falseва барои ҷойҳои холӣna=Falseилова кунед.
Ёддошт
- Сатрҳо аз рӯйи шарт:
df[mask]; индекс мемонад. - Чанд шарт:
(condition1) & (condition2),|,~. - Фосила ва маҷмӯъ:
between,isin. - Сатрҳо ва сутунҳо:
loc[mask, columns]; мавқеъҳо:iloc. - Матн:
.str.contains(text, case=False, regex=False, na=False). - Набудани мувофиқат:
result.empty.