14Pandas 百题大冲关

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14Pandas 百题大冲关相关的知识,希望对你有一定的参考价值。

参考技术A

导入 Pandas:

查看 Pandas 版本信息:

Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。其中 Series 和 DataFrame 应用的最为广泛。
Series 是一维带标签的数组,它可以包含任何数据类型。包括整数,字符串,浮点数,Python 对象等。Series 可以通过标签来定位。
DataFrame 是二维的带标签的数据结构。我们可以通过标签来定位数据。这是 NumPy 所没有的。

Pandas 中,Series 可以被看作由 1 列数据组成的数据集。
创建 Series 语法:s = pd.Series(data, index=index),可以通过多种方式进行创建,以下介绍了 3 个常用方法。
从列表创建 Series:

从 Ndarray 创建 Series:

从字典创建 Series:

修改 Series 索引:

Series 纵向拼接:

Series 按指定索引删除元素:

Series 修改指定索引元素:

Series 按指定索引查找元素:

Series 切片操作:

Series 加法运算:
Series 的加法运算是按照索引计算,如果索引不同则填充为 NaN(空值)。

Series 减法运算:
Series的减法运算是按照索引对应计算,如果不同则填充为 NaN(空值)。

Series 乘法运算:
Series 的乘法运算是按照索引对应计算,如果索引不同则填充为 NaN(空值)。

Series 除法运算:
Series 的除法运算是按照索引对应计算,如果索引不同则填充为 NaN(空值)。

Series 求中位数:

Series 求和:

Series 求最大值:

Series 求最小值:

与 Sereis 不同,DataFrame 可以存在多列数据。一般情况下,DataFrame 也更加常用。
通过 NumPy 数组创建 DataFrame:

通过字典数组创建 DataFrame:

查看 DataFrame 的数据类型:

预览 DataFrame 的前 5 行数据:

查看 DataFrame 的后 3 行数据:

查看 DataFrame 的索引:

查看 DataFrame 的列名:

查看 DataFrame 的数值:

查看 DataFrame 的统计数据:

DataFrame 转置操作:

对 DataFrame 进行按列排序:

对 DataFrame 数据切片:

对 DataFrame 通过标签查询(单列):

对 DataFrame 通过标签查询(多列):

对 DataFrame 通过位置查询:

DataFrame 副本拷贝:

判断 DataFrame 元素是否为空:

添加列数据:

根据 DataFrame 的下标值进行更改。:

根据 DataFrame 的标签对数据进行修改:

DataFrame 求平均值操作:

对 DataFrame 中任意列做求和操作:

将字符串转化为小写字母:

将字符串转化为大写字母:

对缺失值进行填充:

删除存在缺失值的行:

DataFrame 按指定列对齐:

CSV 文件写入:

CSV 文件读取:

Excel 写入操作:

Excel 读取操作:

建立一个以 2018 年每一天为索引,值为随机数的 Series:

统计s 中每一个周三对应值的和:

统计s中每个月值的平均值:

将 Series 中的时间进行转换(秒转分钟):

UTC 世界时间标准:

转换为上海所在时区:

不同时间表示方式的转换:

创建多重索引 Series:
构建一个 letters = [\'A\', \'B\', \'C\'] 和 numbers = list(range(10))为索引,值为随机数的多重索引 Series。

多重索引 Series 查询:

多重索引 Series 切片:

根据多重索引创建 DataFrame:
创建一个以 letters = [\'A\', \'B\'] 和 numbers = list(range(6))为索引,值为随机数据的多重索引 DataFrame。

多重索引设置列名称:

DataFrame 多重索引分组求和:

DataFrame 行列名称转换:

DataFrame 索引转换:

DataFrame 条件查找:

查找 age 大于 3 的全部信息

** 根据行列索引切片:**

DataFrame 多重条件查询:
查找 age<3 且为 cat 的全部数据。

DataFrame 按关键字查询:

DataFrame 按标签及列名查询。:

DataFrame 多条件排序:
按照 age 降序,visits 升序排列

DataFrame 多值替换:
将 priority 列的 yes 值替换为 True,no 值替换为 False。

DataFrame 分组求和:

使用列表拼接多个 DataFrame:

找出 DataFrame 表中和最小的列:

DataFrame 中每个元素减去每一行的平均值:

DataFrame 分组,并得到每一组中最大三个数之和:

当分析庞大的数据时,为了更好的发掘数据特征之间的关系,且不破坏原数据,就可以利用透视表 pivot_table 进行操作。
透视表的创建:
新建表将 A, B, C 列作为索引进行聚合。

透视表按指定行进行聚合:
将该 DataFrame 的 D 列聚合,按照 A,B 列为索引进行聚合,聚合的方式为默认求均值。

透视表聚合方式定义:
上一题中 D 列聚合时,采用默认求均值的方法,若想使用更多的方式可以在 aggfunc 中实现。

透视表利用额外列进行辅助分割:
D 列按照 A,B 列进行聚合时,若关心 C 列对 D 列的影响,可以加入 columns 值进行分析。

透视表的缺省值处理:
在透视表中由于不同的聚合方式,相应缺少的组合将为缺省值,可以加入 fill_value 对缺省值处理。

在数据的形式上主要包括数量型和性质型,数量型表示着数据可数范围可变,而性质型表示范围已经确定不可改变,绝对型数据就是性质型数据的一种。
绝对型数据定义:

对绝对型数据重命名:

重新排列绝对型数据并补充相应的缺省值:

对绝对型数据进行排序:

对绝对型数据进行分组:

缺失值拟合:
在FilghtNumber中有数值缺失,其中数值为按 10 增长,补充相应的缺省值使得数据完整,并让数据为 int 类型。

数据列拆分:
其中From_to应该为两独立的两列From和To,将From_to依照_拆分为独立两列建立为一个新表。

字符标准化:
地点的名字都不规范(如:londON应该为London)需要对数据进行标准化处理。

删除坏数据加入整理好的数据:
将最开始的 From_to 列删除,加入整理好的 From 和 to 列。

去除多余字符:
如同 airline 列中许多数据有许多其他字符,会对后期的数据分析有较大影响,需要对这类数据进行修正。

格式规范:
在 RecentDelays 中记录的方式为列表类型,由于其长度不一,这会为后期数据分析造成很大麻烦。这里将 RecentDelays 的列表拆开,取出列表中的相同位置元素作为一列,若为空值即用 NaN 代替。

信息区间划分:
班级一部分同学的数学成绩表,如下图所示

但我们更加关心的是该同学是否及格,将该数学成绩按照是否>60来进行划分。

数据去重:
一个列为A的 DataFrame 数据,如下图所示

尝试将 A 列中连续重复的数据清除。

数据归一化:
有时候,DataFrame 中不同列之间的数据差距太大,需要对其进行归一化处理。
其中,Max-Min 归一化是简单而常见的一种方式,公式如下:

Series 可视化:

DataFrame 折线图:

DataFrame 散点图:

DataFrame 柱形图:

python百题大冲关

参考答案仓库:https://github.com/Shallow22/python-100

1. 实现一个算法来识别一个字符串的字符是否是唯一的。

挑战内容

本次挑战中,你需要在 unique_chars.py 文件中补充函数 has_unique_chars 的空缺部分。

has_unique_chars 函数接受一个参数,string 用于指定传入的字符串;
has_unique_chars 函数输出一个布尔值,即 True 或者 False。
你需要补充 has_unique_chars 函数,使其可以识别传入的 string 字符串的字符是否是唯一的,即有没有重复的字符。要求如下:

如果传入字符串的字符是唯一的,则返回 True;
如果传入字符串的字符是有重复的,则返回 False;
如果传入的字符串为 None,也返回 False。
我的代码:

class UniqueChars(object):
    def has_unique_chars(self, string):
        if string is None:
            return False
        else:
            if len(string) > len(set(string)):
                return False
            else:
                return True

官方代码:

class UniqueChars(object):

    def has_unique_chars(self, string):
        if string is None:
            return False
        return len(set(string)) == len(string)

2. 确定字符串是否是另一个的排列

挑战介绍

实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。
排列的解释如下:

如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。

挑战内容

本次挑战中,你需要在 permutation.py 文件中补充函数 is_permutation 的空缺部分。

is_permutation 函数接受两个参数,str1,str2 用于指定传入的两个字符串;
is_permutation 函数输出一个布尔值,即 True 或者 False。
你需要补充 is_permutation 函数,使其可以识别 str2 字符串是否是 str1 字符串的排列。要求如下:

如果 str2 字符串是 str1 字符串的排列,则返回 True;
如果 str2 字符串不是 str1 字符串的排列,则返回 False;
如果传入的字符串有 None,或者有空字符串,则返回 False。

class Permutations(object):

    def is_permutation(self, str1, str2):
        if str1 is None or str2 is None:
            return False
        return sorted(str1) == sorted(str2)
        # 判断排序后是否一样

3. 确定字符串是否是另一个的旋转

挑战介绍

实现一个算法来识别一个字符串 s2 是否是另一个字符串 s1 的旋转。
旋转的解释如下:

如果将 s1 从某个位置断开,拆分成两个字符串(可能有一个为空字符串),再将这两个字符串调换顺序后拼接起来,能够得到 s2 ,那么说字符串 s2 是字符串 s1 的旋转。

挑战内容

本次挑战中,你需要在 rotation.py 文件中补充函数 is_substring 及函数 is_rotation 的空缺部分。

is_substring 函数接受两个参数,s1,s2 用于指定传入的两个字符串;

is_substring 函数用于判断传入的一个字符串是否是另一个的子字符串,它需要返回一个布尔值。

is_rotation 函数接受两个参数,s1,s2 用于指定传入的两个字符串;

is_rotation 函数需调用 is_substring 函数,但仅可调用一次;

is_rotation 函数输出一个布尔值,即 True 或者 False

你需要补充 is_substring 函数及 is_rotation 函数,使 is_rotation 函数可以识别传入的 s2 字符串是否是 s1 字符串的旋转。要求如下:

如果 s2 字符串是 s1 字符串的旋转,则返回 True;
如果 s2 字符串不是 s1 字符串的旋转,则返回 False;
如果传入的字符串有一个是 None 或者空字符,但另外一个不是时,也返回 False
class Rotation(object):

    def is_substring(self, s1, s2):
        return s1 in s2


    def is_rotation(self, s1, s2):
        if s1 is None or s2 is None:
            return False
        if len(s1) != len(s2):
            return False
        return self.is_substring(s1, s2+s2)
        # s2 + s2 可以让s1 永远都在s2中,因为是旋转

以上是关于14Pandas 百题大冲关的主要内容,如果未能解决你的问题,请参考以下文章

python百题大冲关(1-6)

numpy百题冲关,pandas百题冲关

numpy百题冲关,pandas百题冲关, numpy-100库直接线上生成和训练,使用google云上notebook环境

1万9千多单词大冲关含真人读音ACCESS数据库

pandas如何选择14到20之间的行

Numpy闯关100题,我闯了95关。