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

欢迎关注公众号【Python开发实战】, 获取更多内容!

工具-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

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

d2 = d1.T
d2

输出:

image-20220410202227646

计算表达式

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

people_dict = {
    'weight': pd.Series([68, 83, 112], index=['alice', 'bob', 'charles']),
    'birthyear': pd.Series([1984, 1985, 1992], index=['bob', 'alice', 'charles'], name='year'),
    'children': pd.Series([0, 3], index=['charles', 'bob']),
    'hobby': pd.Series(['Biking', 'Dancing'], index=['alice', 'bob']),
}
people = pd.DataFrame(people_dict)
people

输出:

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

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

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

输出:

image-20220411212418197

DataFrame查询

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

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

输出:

image-20220411212802514

DataFrame排序

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

people.sort_index(ascending=False)

输出:

image-20220411212820122

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

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

输出:

image-20220411212839274

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

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

输出:

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

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

people.plot(x='height', y='weight', kind='scatter', s=[40, 120, 200])
plt.show()

png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯旋.Lau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值