简介
- Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
- Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。
- Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)
- Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)
- Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据
- Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征
- Pandas 广泛应用在学术、金融、统计学等各个数据分析领域
pandas的应用
- Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
数据结构
- Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库
链接: NumPy. - DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
NumPy数据类型
pandas安装
使用 pip 安装 pandas:
pip install pandas
安装成功后,我们就可以导入 pandas 包使用:
import pandas
发现安装失败了,于是,选择在pycharm中File->settings->Project->Python Interpreter中直接添加pandas
实例
import pandas as pd
mydataset = {
'sites': ["Google", "Runoob", "Wiki"],
'number': [1, 2, 3]
}
myvar = pd.DataFrame(mydataset)
print(mydataset)
print(myvar)
运行结果:
利用DataFrame添加索引,转化为行列结构
Pandas - Series
Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
Series 由索引(index)和列组成,函数如下:
pandas.Series( data, index, dtype, name, copy)
data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。
实例1:
import pandas as pd
a = [1, 2, 3]
myvar = pd.Series(a)
print(myvar)
print(myvar[1])
运行结果:
0 1
1 2
2 3
dtype: int64 //数据类型
3 //myvar[1]
实例2:指定索引值
import pandas as pd
a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index = ["x", "y", "z"])
print(myvar)
print(myvar[y])
运行结果:
x Google
y Runoob
z Wiki
dtype: object
Runoob
实例3:我们也可以使用 key/value 对象,类似字典来创建 Series:
import pandas as pd
sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [1, 2], name="RUNOOB-Series-TEST" )
print(myvar)
运行结果:
1 Google
2 Runoob
Name: RUNOOB-Series-TEST, dtype: object
Pandas - DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
- Pandas DataFrame 是一个二维的数组结构,类似二维数组。
- DataFrame 数据类型一个表格,包含 rows(行) 和 columns(列):
- Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1
返回结果其实就是一个 Pandas Series 数据。 - 也可以返回多行数据,使用 [[ … ]] 格式,… 为各行的索引,以逗号隔开:
返回结果其实就是一个 Pandas DataFrame 数据 - 如何获取 dataframe 中其中几列?
当处理数据时候 series 较多而我们其中只关注其中一些特定的列时候可以使用
print(df[["apple","banana"]])
Pandas CSV 文件
CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。
Pandas 可以很方便的处理 CSV 文件
import pandas as pd
#import csv
df = pd.read_csv(r'C:\Users\dell\Downloads\nba.csv')
print(df.to_string())
- to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 … 代替
- 导入csv文件,csv库原来是是pycharm自带的,然后导入文件,在路径前面加r,即保持字符原始值的意思,否则报错:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: tr这个错误,其实引起这个错误的原因就是转义的问题。
我们也可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件
df = pd.DataFrame(dict)
# 保存 dataframe
df.to_csv('site.csv')
- head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行
- tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN
- info() 方法返回表格的一些基本信息
Pandas JSON
数据清洗
数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。
Pandas 清洗空值
如果我们要删除包含空字段的行,可以使用 dropna() 方法,语法格式如下:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
- 我们可以通过 isnull() 判断各个单元格是否为空
print (df['NUM_BEDROOMS'].isnull())
- 以上例子中我们看到 Pandas 把 n/a 和 NA 当作空数据,na 不是空数据,不符合我们要求,我们可以指定空数据类型:
import pandas as pd
missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values = missing_values)
print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())
- 我们也可以 fillna() 方法来替换一些空字段:
df.fillna(12345, inplace = True)
df['PID'].fillna(12345, inplace = True)
print(df.to_string())
- 替换空单元格的常用方法是计算列的均值、中位数值或众数。
Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)
x = df["ST_NUM"].mean()
df["ST_NUM"].fillna(x, inplace = True)
Pandas 清洗格式错误数据
# 第三个日期格式错误
data = {
"Date": ['2020/12/01', '2020/12/02' , '20201226'],
"duration": [50, 40, 45]
}
df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
df['Date'] = pd.to_datetime(df['Date'])
Pandas 清洗错误数据
import pandas as pd
person = {
"name": ['Google', 'Runoob' , 'Taobao'],
"age": [50, 200, 12345]
}
df = pd.DataFrame(person)
for x in df.index:
if df.loc[x, "age"] > 120:
df.loc[x, "age"] = 120
# df.drop(x, inplace = True)
print(df.to_string())
Pandas 清洗重复数据
如果我们要清洗重复数据,可以使用 duplicated() 和 drop_duplicates() 方法。
- 如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False
- 删除重复数据,可以直接使用drop_duplicates() 方法。