KXLau

V1

2022/04/13阅读:21主题:橙心

pandas教程04---DataFrame的高级操作

工具-pandas

pandas库提供了高性能、易于使用的数据结构和数据分析工具。其主要数据结构是DataFrame,可以将DataFrame看做内存中的二维表格,如带有列名和行标签的电子表格。许多在Excel中可用的功能都可以通过编程实现,例如创建数据透视表、基于其他列计算新列的值、绘制图形等。还可以按照列的值对行进行分组,或者像SQL中那样连接表格。pandas也擅长处理时间序列。

但是介绍pandas之前,需要有numpy的基础,如果还不熟悉numpy,可以查看numpy快速入门教程

导入pandas

import pandas as pd

Dataframe对象

一个DataFrame对象表示一个电子表格,带有单元格值、列名和行索引标签。可以定义表达式基于其他列计算列的值、创建数据透视表、按行分组、绘制图形等。可以将DataFrame视为Series的字典。

转置

d1 = pd.DataFrame(
    {
        ('public''birthyear'): {('Paris''alice'):1985, ('Paris''bob'):1984, ('London''charles'): 1992},
        ('public''hobby'): {('Paris''alice'):'Biking', ('Paris''bob'):'Dancing'},
        ('private''weight'): {('Paris''alice'):68, ('Paris''bob'):83, ('London''charles'): 112},
        ('private''children'): {('Paris''alice'):np.nan, ('Paris''bob'):3, ('London''charles'): 0},
    }
)
d1

输出:

image-20220410202047442
image-20220410202047442

可以使用属性T交换行索引和列索引。

d2 = d1.T
d2

输出:

image-20220410202227646
image-20220410202227646

计算表达式

pandas支持的一个重要特性是表达式的计算,这需要依赖于numexpr,即必须安装安库才能使用该特性。

people_dict = {
    'weight': pd.Series([6883112], index=['alice''bob''charles']),
    'birthyear': pd.Series([198419851992], index=['bob''alice''charles'], name='year'),
    'children': pd.Series([03], index=['charles''bob']),
    'hobby': pd.Series(['Biking''Dancing'], index=['alice''bob']),
}
people = pd.DataFrame(people_dict)
people

输出:

image-20220410201708721
image-20220410201708721
people.eval('weight / (height / 100) ** 2 > 25')

输出:

alice      False
bob         True
charles     True
dtype: bool

还支持赋值表达式,将inplace参数设置为True就可以直接修改DataFrame,而不是得到一个修改的副本。

people.eval('body_mass_index = weight / (height / 100) ** 2 ', inplace=True)
people

输出:

image-20220411212357076
image-20220411212357076

表达式中可以使用局部变量或全局变量,方法是在变量前面加符号@

overweight_threshold = 30
people.eval('overweight = body_mass_index > @overweight_threshold', inplace=True)
people

输出:

image-20220411212418197
image-20220411212418197

DataFrame查询

query方法可以根据查询表达式从DataFrame中筛选数据。

people.query('age > 30 and pets == 0')

输出:

image-20220411212802514
image-20220411212802514

DataFrame排序

通过嗲用sort_index方法可以对DataFrame进行排序。默认情况下,是按照行索引标签升序对行进行排序,但是也可以翻转顺序。

people.sort_index(ascending=False)

输出:

image-20220411212820122
image-20220411212820122

请注意,sort_index方法返回的是一个排序后的副本。要是想直接修改,同样的设置inplace参数为True。此外,可以设置参数axis=1来对列排序而不是对行排序。

people.sort_index(axis=1, inplace=True)
people

输出:

image-20220411212839274
image-20220411212839274

可以值排序DataFrame,而不是按行索引或列索引,调用sort_values方法,并指定要排序的列。

people.sort_values(by='age', inplace=True)
people

输出:

image-20220411212855798
image-20220411212855798

绘制DataFrame

和Series相似,基于DataFrame,使用pandas绘制漂亮的图形很容易。例如,通过调用DataFrame的plot方法,绘制折线图是很容易的。

import matplotlib.pyplot as plt
people.plot(x='body_mass_index', y=['height''weight'], kind='line')
plt.show()
png
png

可以传递matplotlib函数支持的额外参数。例如,创建一个散点图,并使用matplotlib的scatter()函数中s参数,传递设置点大小的列表。

people.plot(x='height', y='weight', kind='scatter', s=[40120200])
plt.show()
png
png

分类:

人工智能

标签:

数据挖掘

作者介绍

KXLau
V1