Когато се опитвате да разберете голям DataFrame в Pandas, може да се наложи да го подмножите по колони и редове. В този урок ще покажем най-разпространените случаи на използване на разделяне на колони във вашия DataFrame.
Ще започнем с настройването на нашия примерен DataFrame, което ще направим, като изпълним следния код на Python в любимата ни среда (за простота използвам Anaconda и Jupyter Lab).
import pandas as pd # import the pandas library
languages = ({"language": [ "Python", "C-Sharp", "Javascript","PHP"] ,
"avg_difficulty_level": [3, 2, 2, 1],
"avg_salary": [120, 100, 120, 80],
"applications": [10,15,14,20]})
# Now let's convert our dict to a DataFrame
languages = pd.DataFrame.from_dict(languages)
Сега нека разгледаме първите редове на Dataframe, използвайки метода head().
languages.head()
Както можете да видите, това е доста прост DataFrame, който ще използваме като пример в тази публикация:
| |
език |
avg_difficulty_level |
средна_заплата |
приложения |
| 0 |
Python |
3 |
120 |
10 |
| 1 |
C-Sharp |
2 |
100 |
15 |
| 2 |
Javascript |
2 |
120 |
14 |
| 3 |
PHP |
1 |
80 |
20 |
Филтриране на една колона
Ще започнем с най-простия случай, който е да подмножим една колона от нашия набор от данни. Изпълнението на следната команда ще създаде обект на серия:
По име/етикет
languages["language"]
Резултатът е серия:
0 Python
1 C-Sharp
2 Javascript
3 PHP
Име: език, dtype: обект
type(languages["language"])
pandas.core.series.Series
По индекс
Следната команда също ще върне серия, съдържаща първата колона
languages.iloc[:,0]
Избиране на множество колони
По име
Когато предава списък с колони, Pandas ще върне DataFrame, съдържащ част от данните.
languages[["language", "applications"]]
| |
език |
приложения |
| 0 |
Python |
10 |
| 1 |
C-Sharp |
15 |
| 2 |
Javascript |
14 |
| 3 |
PHP |
20 |
По етикет (с loc)
df.loc[:,["language","applications"]]
Резултатът ще бъде подобен.
По индекс
Сега нека извлечем няколко колони с помощта на индекса:
languages.iloc[: ,[0,3]]
| |
език |
приложения |
| 0 |
Python |
10 |
| 1 |
C-Sharp |
15 |
| 2 |
Javascript |
14 |
| 3 |
PHP |
20 |
По условие
В този случай просто ще покажем колоните, чието име съответства на конкретен израз. Ще използваме доста удобния метод за филтриране :
languages.filter(axis = 1, like="avg")
бележки:
- можем също да филтрираме по конкретен регулярен израз (regex).
- Можем да приложим параметъра axis=0 за филтриране по конкретна стойност на ред.
Филтрирайте конкретни редове по условие
Ето един доста лесен начин за подзадаване на DataFrame според стойност на ред:
languages[(languages["applications"] > 15)]
Имаме само един резултат:
languages[(languages["applications"] > 15)]
| |
език |
avg_difficulty_level |
средна_заплата |
приложения |
| 3 |
PHP |
1 |
80 |
20 |