Lynda.com: Pandas Essential Training chap02-chap04

大概用了经过了一周的时间把Lynda.com上面的这门课程刷完,现在整理一下这门课的学习笔记。

chap02 chap 03

Pandas的两个核心对象

  1. DataFrame
  2. Series
  3. 两个序列之间的关系
    DataFrames 和 Series 是 Pandas包中的两个核心数据类型。
    DataFrame:数据框, 是一个常见的数据表格形式。其中,行表示记录 observation,列表示字段 variables。
    Series:序列,是一个序列数据形式。
    DataFrames 的每一个字段都可以看做是Series 数据类型。

实践部分

import pandas as pd
# 这是Pandas 的包导入操作 (在此之前需要将Pandas的包在环境中安装好)
# 这里as pd 指的是缩写形式 下面的代码中可以用pd作为pandas对象的简写
oo = pd.read_csv('../data/olympics.csv',skiprows=4)
# pd.read_csv() pd对象提供的数据从csv文件中的读入操作
# 两个变量 第一个变量是文件路径,第二个parameter skiprows 指定跳过前 4 行 进行读入
type(oo)
# type() 是python的内置函数 可以通过type()函数 查看变量 oo 的类型,其类型为 pandas.core.frame.DataFrame
oo.head()
oo.tail()
oo.info()
# 这三个DataFrame类型的方法,用来查看DataFrame的一些基本信息。head(n)表示取头 n 行数据 n 的默认值为5, n 可以取其他整数值。
# tail(n)类似从最后开始取数据行。
# info 则显示数据框中的所有变量的类型 size 信息。
oo.shape()
#用于查看变量的两个维度 返回值为 (行数,列数)
oo['NOC']
oo.NOC
# 这是两种取出DataFrame的单个变量序列的方法。使用oo.columnName需要注意这里的columnName不能包含空格。
type(oo.NOC)
# 再次使用type()查看变量类型,此时单个变量序列类型为pandas.core.series.Series
oo[['Edition','City','Athlete','Medal']]
# 取多列数据序列的方法
type(oo[['Edition','City','Athlete','Medal']])
# 再次查看变量类型为pandas.core.frame.DataFrame

chap04

这一部分主要介绍DataFrame/Series 的几个常用方法。直接从实验部分开始:

import pandas as pd # 导入Pandas包
oo = pd.read_csv('../data/olympics.csv',skiprows=4) # 导入数据
# 导入文件发现问题
# 当文件路径出现中文时会出错,pd.read_csv默认engine参数为 c 将其修改成 python 可以修正这个错误
# 参数修改为 engine = "python",skiprows = 4,encoding = "utf_16"
# 当前文件系统默认的存储方式是UTF-8 但是很多特殊字符不能打开,在用记事本方式重新打开并且保存为 unicode之后,乱码问题解决
# UTF_16编码表示unicode skiprows表示跳过csv文件前面4行

value_counts()

value_counts()是Series的方法。对DataFrame使用该方法会报错:‘DataFrame’ object has no attribute ‘value_counts’。
Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
简单解释一下:
normalize = False 计算的是次数,为True 计算的是频率
sort = True, ascending = False 默认按照降序排序
dropna = True 不计入 nan值
bins = None 如果设定为整数值,则返回分组的频数统计

oo.Gender.value_counts()
oo.Edition.value_counts()
# 这里展示的是value_counts()作为Series类型的操作方法
type(oo.Edition.value_counts())
# 查看返回结果 为pandas.core.series.Series

sort_values()

sort_values() DataFrame和Series都适用,用于排序
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
Series.sort_values(axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
by 加入str 或者是 str列表 Series 没有这个参数 仅有一列数据不存在指定列排序
axis = 0 表示 按照列变量的大小进行行变量排序(相当于Excel中的排序功能)axis = 1 则是按照行变量大小对列变量进行排序 这种用法应该比较少
inplace = False 默认生成新的DataFrame 不对原有的DataFrame进行值修改
kind = ‘quicksort’ 排序算法指定 默认的是quicksort 可选的还有 mergesort headpsort 这些排序算法涉及计算机算法的内容
na_position = ‘last’ nan的排序位置

oo.sort_values(by=['Edition','Athlete'])
# 对数据框oo按照 列字段 Edition和Athlete 进行排序 
oo.head()
# 重新查看oo 因为inplace 默认为False,所以不会改变原oo的数据

Boolean indexing

DataFrame[logic series]
Series[logic series]
这个数据框的特性和R,MATLAB很像
通过 布尔序列值进行筛选。结果筛选出逻辑值为True的结果

oo[(oo.Medal == 'Gold') & (oo.Gender == 'Women')]
# 这里就是选出所有记录中,金牌的女选手的记录
# 务必注意有 逻辑运算符时 要对运算子式加圆括号

string handler

Series.str.methodname()
python对于字符串有很多的操作方法包括:
str.len()
str.upper()
str.lower()
str.find()
str.contains()
str.startswith()
str.endswith()

这些都可以用于Pandas中的字符串Series的操作,不可以用于数值Series。

oo.Athlete.str.contains('Florence')
# 这里通过contains方法判断oo中Athlete是否含有Florence,返回值为Boolean序列
oo[oo.Athlete.str.contains('Florence')]
# 结合两种方法可以查询到符合条件的记录

猜你喜欢

转载自blog.csdn.net/Minervar/article/details/84249291
今日推荐