机器学习基础三部曲之pandas
Pandas 简介
Pandas 是用于进行数据分析和建模的重要库,广泛应用于 TensorFlow 编码。该教程提供了学习本课程所需的全部 Pandas 信息
学习目标
- 大致了解 pandas 库的 DataFrame 和 Series 数据结构
- 存取和处理 DataFrame 和 Series 中的数据
- 将 CSV 数据导入 pandas 库的 DataFrame
- 对 DataFrame 重建索引来随机打乱数据
基本概念
pandas 中的主要数据结构被实现为以下两类:
- DataFrame,您可以将它想象成一个关系型数据表格,其中包含多个行和已命名的列。
- Series,它是单一列。DataFrame 中包含一个或多个 Series,每个 Series 均有一个名称。
数据框架是用于数据操控的一种常用抽象实现形式。Spark 和 R 中也有类似的实现。
pandas使用笔记
例1:
import pandas as pd
#导入pandas模块
california_housing_dataframe = pd.read_csv("https://download.mlcc.google.cn/mledu-datasets/california_housing_train.csv", sep=",")
#read_csv读取csv文件
california_housing_dataframe.describe()
#describe是一个快速统计的函数
california_housing_dataframe.head()
#head读取数据集的前5行
california_housing_dataframe.hist('housing_median_age')
#hist可以根据一列绘制图表
例2:
city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
population = pd.Series([852469, 1015785, 485199])
#创建两个series
cities = pd.DataFrame({ 'City name': city_names, 'Population': population })
#创建一个DataFrame,一列是City name;一列是Population
print(type(cities['City name']))
cities['City name']
#打印City name这一列
print(type(cities[0:2]))
cities[0:2]
#切片,表示从0开始,包括0、1但是不包括2
例3:
可以向 Series 应用 Python 的基本运算指令
import numpy as np
#导入numpy模块
population / 1000.
#population列除1000
np.log(population)
#计算population列的log值
population.apply(lambda val: val > 1000000)
#对于更复杂的单列转换,您可以使用 Series.apply。像 Python 映射函数一样,Series.apply 将以参数形式接受 lambda 函数,而该函数会应用于每个值。
上面的示例创建了一个指明 population 是否超过 100 万的新 Series
DataFrame的修改
cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])
cities['Population density'] = cities['Population'] / cities['Area square miles']
cities
#上面两个例子是增加两个Series
cities ['saint'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))
cities
#增加一个saint的series,条件是大于50且包含san
city_names.index
#显示索引
cities.iloc[1:2]
#切片
cities.reindex([2, 0, 1])
#pandas的reindex对象,是数据符合新的索引来构造一个新的对象
#Series的reindex使它符合新的索引,如果索引的值不存在就填入缺失值
cities.reindex(np.random.permutation(cities.index))
#设置一个随机的
cities.reindex([0,2,3,4],fill_value = 0)
#把NaN的值赋0
map与lambda
map就是将自定义函数应用于Series每个元素
apply和applymap
apply和applymap是对dataframe的操作,前者操作一行或者一列,后者操作每个元素
contains包含关系
#使用DataFrame模糊筛选数据(类似SQL中的LIKE)
#使用正则表达式进行模糊匹配,*匹配0或无限次,?匹配0或1次
df_obj[df_obj['套餐'].str.contains(r'.\*?语音CDMA.\*')]
#下面两句效果一致
df[df['商品名称'].str.contains("四件套")]
df[df['商品名称'].str.contains(r".\*四件套.\*")]