Pandas 是基于 NumPy 的一种数据处理工具,该工具为了解决数据分析任务而创建。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的函数和方法。这些练习着重DataFrame和Series对象的基本操作,包括数据的索引、分组、统计和清洗。
之前也发过Numpy面试题,大家可以看一下!Python中的Numpy基础20问
参考资料 | 100-pandas-puzzles - GitHub | Pandas 百题大冲关
基本操作
- 导入 Pandas 库并简写为 pd,并输出版本号
import pandas
- 从列表创建 Series
0,
- 从字典创建 Series
'a':
- 从 NumPy 数组创建 DataFrame
'today',periods=
- 从CSV中创建 DataFrame,分隔符为“;”,编码格式为gbk
'test.csv', encoding=
- 从字典对象创建DataFrame,并设置索引
import numpy
df = pd.DataFrame(data, index=labels)
df
- 显示
df
的基础信息,包括行的数量;列名;每一列值的数量、类型
df.info()
# 方法二
# df.describe()
- 展示
df
的前3
行
3]
- 取出
df
的animal
和age
列
'animal',
- 取出索引为
[3, 4, 8]
行的animal
和age
列
3,
- 取出
age
值大于3
的行
'age'] >
- 取出
age
值缺失的行
'age'].isnull()]
- 取出
age
在2,4
间的行(不含)
'age']>
f
行的age
改为1.5
'f',
- 计算
visits
的总和
'visits'].sum()
- 计算每个不同种类
animal
的age
的平均数
'animal')[
- 在
df
中插入新行k
,然后删除该行
#插入
- 计算
df
中每个种类animal
的数量
'animal'].value_counts()
- 先按
age
降序排列,后按visits
升序排列
'age',
- 将
priority
列中的yes, no
替换为布尔值True, False
'priority'] = df[
- 将
animal
列中的snake
替换为python
'animal'] = df[
- 对每种
animal
的每种不同数量visits
,计算平均age
,即,返回一个表格,行是aniaml种类,列是visits
数量,表格值是行动物种类列访客数量的平均年龄
'animal', columns=
进阶操作
- 有一列整数列A的DatraFrame,删除数值重复的行
'A': [
- 一个全数值DatraFrame,每个数字减去该行的平均数
5,
- 一个有5列的DataFrame,求哪一列的和最小
5,
- 给定DataFrame,求
A
列每个值的前3的B
的值的和
'A': list(
- 给定DataFrame,有列
A, B
,A
的值在1-100(含),对A
列每10步长,求对应的B的和
'A': [
- 给定DataFrame,计算每个元素至左边最近的0(或者至开头)的距离,生成新列
y
'X': [
- 一个全数值的DataFrame,返回最大3个值的坐标
5,
- 给定DataFrame,将负值代替为同组的平均值
'grps': list(
- 计算3位滑动窗口的平均值,忽略
NAN
'group': list(
Series 和 Datetime索引
- 创建Series
s
,将2015所有工作日作为随机值的索引
'2015-01-01', end=
- 所有礼拜三的值求和
2].sum()
- 求每个自然月的平均数
'M').mean()
- 每连续4个月为一组,求最大值所在的日期
'4M')).idxmax()
- 创建2015-2016每月第三个星期四的序列
'2015-01-01',
数据清洗
'From_To': [
FlightNumber
列中有些值缺失了,他们本来应该是每一行增加10,填充缺失的数值,并且令数据类型为整数
'FlightNumber'] = df[
- 将
From_To
列从_
分开,分成From, To
两列,并删除原始列
'_', expand=
- 将
From, To
大小写统一首字母大写其余小写
'From'] = df[
Airline
列,有一些多余的标点符号,需要提取出正确的航司名称。举例:'(British Airways. )' 应该改为 'British Airways'.
'Airline'] = df[
Airline
列,数据被以列表的形式录入,但是我们希望每个数字被录入成单独一列,delay_1, delay_2, ...
没有的用NAN
替代。
'RecentDelays'].apply(pd.Series)
层次化索引
- 用
letters = ['A', 'B', 'C']
和numbers = list(range(10))
的组合作为系列随机值的层次化索引
'A',
- 检查
s
是否是字典顺序排序的
s.index.is_lexsorted()
# 方法二
# s.index.lexsort_depth == s.index.nlevels
- 选择二级索引为
1, 3
的行
1,
- 对
s
进行切片操作,取一级索引至B
,二级索引从2
开始到最后
'B',
46.计算每个一级索引的和(A, B, C
每一个的和)
0)
- 交换索引等级,新的Series是字典顺序吗?不是的话请排序
0,
可视化
import matplotlib.pyplot
- 画出
df
的散点图
"xs",
- 可视化指定4维DataFrame
"productivity":[
- 在同一个图中可视化2组数据,共用X轴,但y轴不同
"revenue":[
-END-
往期精彩超简单!基于Python搭建个人“云盘”
推荐一些能提高生产力的 Python 库
Excel VS Python 谁更适合数据分析?
硬核!30 张图解 HTTP 常见的面试题
10个省时间的 PyCharm 技巧
python每日更换“必应图片”为“桌面壁纸”
教你使用Python下载全网视频!
END
关注【程序IT圈】,更多的Python好文输出