1.Pandas简介
Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。
Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。
Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。
Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。
安装方式:
pip install pandas
#查看版本
import pandas as pd
pd.__version__
2. Pandas 中数据结构
2.1 Series
Series结构,也称 Series序列,是Pandas常用的数据结构之一,它是一种类似于一维数组的结构,由一组数据值(value)和一组标签组成,其中标签与数据值具有对应关系。
标签不必是唯一的,但必须是可哈希类型。该对象既支持基于整数的索引,也支持基于标签的索引,并提供了许多方法来执行涉及索引的操作。ndarray 的统计方法已被覆盖,以自动排除缺失的数据(NaN)。
Series可以保存任何数据类型,比如整数、字符串、浮点数、Python对象等,它的标签默认为整数,从0开始依次递增。
Series类似于表格中的一个列(column),类似于一个一维数组:
格式
:
pandas.Series(data,index,dtype,name,copy)
参数说明
:
- data:一组数据(ndarray 类型)。
- index:数据索引标签,如果不指定,默认从 0 开始。
- dtype:数据类型,默认会自己判断。
- name:设置名称。
- copy:拷贝数据,默认为 False。
代码示例
:
a = [1,2,3]
my_var = pd.Series(a,index=['a','b','c'],dtype=float,name='myvar')
print(my_var)
也可以使用key/value对象创建Series:
dict1 = {'aa':'a','bb':'b','cc':'c'}
myvar = pd.Series(dict1,index = ['aa','bb','cc'])
myvar
# aa a
# bb b
# cc c
# dtype: object
2.2 DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值)。
DataFrame 既有行索引也有列索引,因此它可以被看做是:共用一个索引,由Series组成的字典。
格式
:
pandas.DataFrame(data,index,coolumns,dtype,copy)
参数说明
:
- data:一组数据(ndarray、series, map, lists, dict 等类型)。
- index:索引值,或者可以称为行标签。
- columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
- dtype:数据类型。
- copy:拷贝数据,默认为 False。
代码示例
:
import pandas as pd
data = [
['Google',1],
['Baidu',2],
['Wiki',3],
]
df = pd.DataFrame(data,columns=['Name','Count'])
print(df)
# Name Count
# 0 Google 1
# 1 Baidu 2
# 2 Wiki 3
3. Pandas 处理CSV文件
CSV(Comma-Separated Values,以逗号为分割值,有时也称为字符分割值,因为分割字符也可以不是逗号,其文件以纯文本形式存储表格数据(数字和文本))。
CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。
代码演示
:
df = pd.read_csv('anjuke.csv')
print(df)
如果不使用df.to_string(),则输出结果为数据前面5行,和后面5行,而中间部分则以… 代替,如图所示:
因此,需要全部显示需要使用:df.to_string()
如果需要将DataFrame转换为.csv文件,可以调用:to_csv()
name = ['xiaofang','xiaoming','xiaohua']
address = ['beijin','tianjin','xian']
ag = [90,80,70]
# 组成字典
dict1 = {'Name':name,'Address':address,'Ag':ag}
df = pd.DataFrame(dict1)
#
print(df)
print(df.Name[0])
#保存dataframe
df.to_csv('my.csv')
3.1 查看CSV数据
3.1.1 head(n):读取前面的n行,如果不填参数,默认返回前5行
df = pd.read_csv('anjuke.csv')
print(df.head())
print(df.head(6))
3.1.2 head(n):读取尾部的后n行,如果不填参数,默认返回后5行
如果是空行,各个字段的值都返回NaN
df = pd.read_csv('anjuke.csv')
print(df.head())
print(df.head(6))
3.1.3 info():返回表格的一些基本信息
import pandas as pd
df = pd.read_csv('anjuke.csv')
print(df.info())
4.Pandas 处理JSON文件
JSON(JavaScript Object Notation,JavaScript对象表示法),是存储和交换文本信息的语法,类似于XML。JSON语法是JavaScript对象表示语法的子集。
特点
:
- 数据在名称/键值对中
- 数据由逗号 , 分隔
- 使用斜杆 \ 来转义字符
- 大括号 {} 保存对象
- 中括号 [] 保存数组,数组可以包含多个对象
JSON 比XML更小、更快,更容易解析。Pandas 可以很方便的处理JSON数据。
实例代码:
df = pd.read_json('site.json')
# print(df.info)
print(df)
to_string() 用于返回 DataFrame 类型的数据. JSON 对象与 Python 字典具有相同的格式,因此可以相互转换。
而当遇到嵌套的复杂JSON数据时,例如mix.js中如图所示:
{
"school_name": "ABC primary school",
"class": "Year 1",
"students": [
{
"id": "A001",
"name": "Tom",
"math": 60,
"physics": 66,
"chemistry": 61
},
{
"id": "A002",
"name": "James",
"math": 89,
"physics": 76,
"chemistry": 51
},
{
"id": "A003",
"name": "Jenny",
"math": 79,
"physics": 90,
"chemistry": 78
}
]
}
这时候我们就需要使用到 json_normalize() 方法将内嵌的数据完整的解析出来,具体来说:json_normalize() 使用了参数 record_path 并设置为 [‘students’] 用于展开内嵌的 JSON 数据 students。
代码示例:
import pandas as pd
import json
# 使用Python JSON 模块载入数据
with open('mix.json','r') as f:
data = json.loads(f.read())
#将嵌套的JSON数据展平
df = pd.json_normalize(
data,
record_path=['students'],
meta=['school_name','class']
)
print(df)
结果如图
:
5.Pandas 数据清洗
数据清晰是对一些没有用的数据进行处理的过程。
因为数据集存在数据缺失、数据格式错误、错误数据或者数据重复的情况。如果想要对数据分析更加准确的前提,就必须对错误的数据进行处理。
实战示范
:利用Pandas包进行数据清洗,数据集如下:
上表的数据集中包含了四种空数据:n/a 、NA、 --、na、87)]
文本预处理示范代码:见下面资源文件