Публичный аккаунт WeChat: «Python Reading Finance»
Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте сообщение в публичном аккаунте
Вслед за предыдущим постомОбработка данных Pandas — список часто используемых функций (включено), В этой статье разобраны некоторые из оставшихся распространенных методов Pandas, Общая сложность будет немного больше, чем в предыдущей статье, но все же относительно легко понять. Без лишних слов, давайте сразу к делу.
Данные, используемые для демонстрации, следующие:
In [11]: data
Out[11]:
company gender salary age
0 B female 30 40.0
1 A female 36 31.0
2 B female 35 28.0
3 B female 9 18.0
4 B female 16 43.0
5 A male 46 22.0
6 B female 15 28.0
7 B female 33 40.0
8 C male 19 32.0
.astype()
Объект:Series
иDataFrame
Основная цель: Изменить тип данных поля, который можно использовать в случае большого количества данныхУменьшить объем памяти, занимаемой данными, в основном используется дляSeries
.
использование:
# 把age字段转为int类型
In [12]: data["age"] = data["age"].astype(int)
In [13]: data
Out[13]:
company gender salary age
0 B female 30 40
1 A female 36 31
2 B female 35 28
3 B female 9 18
4 B female 16 43
5 A male 46 22
6 B female 15 28
7 B female 33 40
8 C male 19 32
.rename()
Объект:Series
,DataFrame
(в большинстве случаев)
Основное использование: в основном используется для модификацииDataFrame
имя столбца
Основные параметры:
-
столбцы (dict-like or function)
Укажите имя столбца, которое нужно изменить, и новое имя столбца, обычно передаваемое как словарь.
-
на месте (boolean, default False)
Воздействовать ли на исходный объект
использование:
# 将'age'更改为员工编号'number',并作用于原对象
In [15]: data.rename(columns={'age':'number'},inplace=True)
In [16]: data
Out[16]:
company gender salary number
0 B female 30 40
1 A female 36 31
2 B female 35 28
3 B female 9 18
4 B female 16 43
5 A male 46 22
6 B female 15 28
7 B female 33 40
8 C male 19 32
.set_index()
Объект:DataFrame
Основное использование: дляDataFrame
Одно (более) из полей задано как индекс
использование:
In [19]: data.set_index('number',inplace=True)
In [20]: data
Out[20]:
company gender salary
number
40 B female 30
31 A female 36
28 B female 35
18 B female 9
43 B female 16
22 A male 46
28 B female 15
40 B female 33
32 C male 19
.reset_index()
Объект:Series
,DataFrame
Основная цель: сбросить индекс, индекс сброса по умолчанию0~len(df)-1
Основные параметры:
-
уронить (boolean, default False)
Следует ли отказаться от исходного индекса, см. демонстрацию ниже.
-
на месте (boolean, default False)
Воздействовать ли на исходный объект
использование:
# drop = True,重置索引,并把原有的索引丢弃
In [22]: data.reset_index(drop=True)
Out[22]:
company gender salary
0 B female 30
1 A female 36
2 B female 35
3 B female 9
4 B female 16
5 A male 46
6 B female 15
7 B female 33
8 C male 19
# drop = False,重置索引
# 原索引列'number'作为新字段进入DataFrame
In [23]: data.reset_index(drop=False,inplace=True)
In [24]: data
Out[24]:
number company gender salary
0 40 B female 30
1 31 A female 36
2 28 B female 35
3 18 B female 9
4 43 B female 16
5 22 A male 46
6 28 B female 15
7 40 B female 33
8 32 C male 19
.drop_duplicates()
Объект:Series
,DataFrame
Основная цель: удалить повторяющиеся значения, функции иSQL
серединаdistinct
похожий
использование:
In [26]: data['company'].drop_duplicates()
Out[26]:
0 B
1 A
8 C
Name: company, dtype: object
.drop()
Объект:Series
,DataFrame
Основное использование: часто используется для удаленияDataFrame
некоторые поля в
Основные параметры:
-
столбцы (single label or list-like)
Указывает поле для удаления
использование:
# 删掉'gender'列
In [27]: data.drop(columns = ['gender'])
Out[27]:
number company salary
0 40 B 30
1 31 A 36
2 28 B 35
3 18 B 9
4 43 B 16
5 22 A 46
6 28 B 15
7 40 B 33
8 32 C 19
.isin()
Объект:Series
,DataFrame
Основное использование: обычно используется для построения логических индексов, дляDataFrame
условная фильтрация данных
использование:
# 筛选出A公司和C公司的员工记录
In [29]: data.loc[data['company'].isin(['A','C'])]
Out[29]:
number company gender salary
1 31 A female 36
5 22 A male 46
8 32 C male 19
pd.cut()
Основное использование: дискретизация непрерывных переменных, например, деление возраста человека на интервалы.
Основные параметры:
-
Икс (array-like)
Одномерные данные, которые необходимо дискретизировать
-
мусорные ведра (int, sequence of scalars, or IntervalIndex)
Установите интервал, на который нужно разделить, вы можете указатьКоличество интервалов, вы также можете указатьпрерывность
-
этикетки (array or bool, optional)
Установить метку интервала
использование:
# 把薪水分成5个区间
In [33]: pd.cut(data.salary,bins = 5)
Out[33]:
0 (23.8, 31.2]
1 (31.2, 38.6]
2 (31.2, 38.6]
3 (8.963, 16.4]
4 (8.963, 16.4]
5 (38.6, 46.0]
6 (8.963, 16.4]
7 (31.2, 38.6]
8 (16.4, 23.8]
Name: salary, dtype: category
Categories (5, interval[float64]): [(8.963, 16.4] < (16.4, 23.8] < (23.8, 31.2] < (31.2, 38.6] <(38.6, 46.0]]
# 自行指定间断点
In [32]: pd.cut(data.salary,bins = [0,10,20,30,40,50])
Out[32]:
0 (20, 30]
1 (30, 40]
2 (30, 40]
3 (0, 10]
4 (10, 20]
5 (40, 50]
6 (10, 20]
7 (30, 40]
8 (10, 20]
Name: salary, dtype: category
Categories (5, interval[int64]): [(0, 10] < (10, 20] < (20, 30] < (30, 40] < (40, 50]]
# 指定区间的标签
In [34]: pd.cut(data.salary,bins = [0,10,20,30,40,50],labels = ['低','中下','中','中上','高'])
Out[34]:
0 中
1 中上
2 中上
3 低
4 中下
5 高
6 中下
7 中上
8 中下
Name: salary, dtype: category
Categories (5, object): [低 < 中下 < 中 < 中上 < 高]
pd.qcut()
Основная цель: дискретизация непрерывных переменных, отличных отpd.cut()
разделить на конкретные значения,pd.qcut()
использоватьквантильразделить интервал
Основные параметры:
-
Икс (array-like)
Одномерные данные, которые необходимо дискретизировать
-
Пожалуйста(integer or array of quantiles)
Установите интервал, на который нужно разделить, вы можете указатьинтервальный формат, вы также можете указатьпрерывность
-
этикетки (array or boolean, default None)
Установить метку интервала
использование:
# 按照0-33.33%,33.33%-66.67%,66.67%-100%百分位进行划分
In [35]: pd.qcut(data.salary,q = 3)
Out[35]:
0 (18.0, 33.667]
1 (33.667, 46.0]
2 (33.667, 46.0]
3 (8.999, 18.0]
4 (8.999, 18.0]
5 (33.667, 46.0]
6 (8.999, 18.0]
7 (18.0, 33.667]
8 (18.0, 33.667]
Name: salary, dtype: category
Categories (3, interval[float64]): [(8.999, 18.0] < (18.0, 33.667] < (33.667, 46.0]]
.where()
Объект:Series
,DataFrame
Основная цель: заменить неквалифицированное значение указанным значением, что эквивалентно выполнениюif-else
Основные параметры:
-
конд (boolean Series/DataFrame, array-like, or callable)
условия для фильтрации
-
разное (scalar, Series/DataFrame, or callable)
не встречается
cond
значение условия (результатFalse
),использоватьother
заменить значение
использование:
# 语句解析
# 若salary<=40,则保持原来的值不变
# 若salary大于40,则设置为40
In [38]: data['salary'].where(data.salary<=40,40)
Out[38]:
0 30
1 36
2 35
3 9
4 16
5 40
6 15
7 33
8 19
Name: salary, dtype: int32
pd.concat()
Основное использование: для объединения несколькихSeries
илиDataFrame
Сложить вместе (можно горизонтальное или вертикальное написание)
Основные параметры:
-
объекты (a sequence or mapping of Series or DataFrame objects)
для сращивания
Series
илиDataFrame
, обычно помещаемый в список и передаваемый в -
ось (0/'индекс', 1/'столбцы')
Управляет сшиванием данных по горизонтали или по вертикали.По умолчанию используется вертикальное сшивание.
-
игнорировать_индекс (bool, default False)
Оставить ли оригинал
Seires
илиDataFrame
внутренний индекс, еслиTrue
Затем создайте новый индекс (0 ~ n-1) для объединенных данных.
использование:
# 分别取data的前三条和后三条为data1和data2
In [41]: data1 = data.head(3)
In [42]: data1
Out[42]:
number company gender salary
0 40 B female 30
1 31 A female 36
2 28 B female 35
In [43]: data2 = data.tail(3)
In [44]: data2
Out[44]:
number company gender salary
6 28 B female 15
7 40 B female 33
8 32 C male 19
# 拼接数据
In [45]: pd.concat([data1,data2],ignore_index = False)
Out[45]:
number company gender salary
0 40 B female 30
1 31 A female 36
2 28 B female 35
6 28 B female 15
7 40 B female 33
8 32 C male 19
# 拼接数据并重置索引
In [46]: pd.concat([data1,data2],ignore_index=True)
Out[46]:
number company gender salary
0 40 B female 30
1 31 A female 36
2 28 B female 35
3 28 B female 15
4 40 B female 33
5 32 C male 19
.pivot_table()
Объект:DataFrame
Основное использование: дляDataFrame
Сводные данные, эквивалентные сводной таблице в Excel
Основные параметры:
-
значения (column to aggregate, optional)
Поле, используемое для операции агрегирования (целевая переменная сводки)
-
показатель (column, Grouper, array, or list of the previous)
Аналог сводной таблицыЗаголовки строк
-
столбцы (column, Grouper, array, or list of the previous)
Аналог сводной таблицыметки столбцов
-
аггфунк (function, list of functions, dict, default numpy.mean)
Какая операция агрегирования выполняется над значениями
использование:
# 从公司和性别两个维度对薪水进行数据透视
# 看看这两个维度下的平均薪资水平
In [47]: data.pivot_table(values = 'salary',index = 'company',
columns = 'gender',aggfunc=np.mean)
Out[47]:
gender female male
company
A 36.0 46.0
B 23.0 NaN
C NaN 19.0
Функции, обычно используемые в Pandas, организованы здесь, как дляmap
иapply
Подобные вещи не будут здесь подробно описаны, а подробное введение можно найти в статьях, написанных ранее. Надеюсь, эти функции могут быть вам полезны!
Нелегко быть оригинальным. Если вы считаете, что это полезно, надеюсь, вы поставите лайк. Спасибо, старые утюги.
Отсканируйте код, чтобы подписаться на официальный аккаунт"Питон Чтение Финансов", получите галантерею в первый раз!