1.Python在数据处理上有代码灵活,开发快速的特点.尤其是Python的Pandas包,无论是在数据分析领域还是在大数据开发场景都具有显著优势:
①Pandas是Python的一个第三方包,也是商业和工程领域最流行的结构化数据工具集,用于数据清洗,处理以及分析.
②Pandas和Spark中很多功能都类似,甚至使用方法都相同.建议两者可以一起学习.
③Pandas在数据开发的流程中的应用场景
在大数据场景下,数据在流转的过程中,Python Pandas丰富的API能够更加灵活,快速的对数据进行清洗和处理
④Pandas在数据处理上有独特的优势:
1)底层是基于Numpy构建的,所有运行速度特别的快
2)有专门的处理缺失数据的API
3)强大而灵活的分组,聚合,转换功能
2.适用场景
①数据量大到excel严重卡顿,且又都是单机数据的时候,我们使用Pandas
②在大数据ETL数据仓库中,对数据进行清洗和处理的环节使用Pandas
打开黑窗口cmd界面,执行 pip install -i Simple Index pandas==1.1.5
卸载pandas命令:pip uninstall pandas
DataFrame->Series->索引列:索引名,索引值.索引下标,行号
DataFrame->Series->数据列:列明,列值
1.1 series对象
Series是Pandas中最基本的数据结构对象,下文简称s对象,是DataFrame的列对象,series本身也有索引.Series是一种类似于一维数组的对象,由下面两个部分组成:
values:一组数据(numpy.ndarray类型)
index:相关的数据索引标签,如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引.
具体操作示例:
#导入pandas
import pandas as pd
#通过list列表来创建
# 使用默认自增索引
s2 = pd.Series([1, 2, 3])
print(s2)
# 自定义索引
s3 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
s3
结果为:
0 ? ?1
1 ? ?2
2 ? ?3
dtype: int64
A ? ?1
B ? ?2
C ? ?3
dtype: int64#使用字典或元组创建series对象
#使用元组
tst = (1,2,3,4,5,6)
pd.Series(tst)#使用字典:
dst = {'A':1,'B':2,'C':3,'D':4,'E':5,'F':6}
pd.Series(dst)
1.2 Series对象的运算
Series和数值型变量计算时,变量会与Series中的每个元素逐一进行计算
两个Series之间计算,索引值相同的元素之间会进行计算;索引不同的元素最终计算的结果会填充成缺失值,用NaN表示
import pandas as pd
# 程序的入门: pyspark的程序, 必须要有程序入门
# 快捷键: main + 回车
if __name__ == '__main__':
? ? print("演示相关的操作: dataFrame")? ? # 1- 创建DataFrame对象
? ? # 演示字典的方式
? ? df = pd.DataFrame(data={
? ? ? ? 'id': [1, 2, 3, 4, 5],
? ? ? ? 'name': ['张三', '李四', '王五', '赵六', '田七'],
? ? ? ? 'address':['北京','上海','广州','天津','成都']
? ? })? ? print(df)
? ? # 演示 列表 + 元组的方式 或者 列表 + 列表 或者 ?元组+元组
? ? df = pd.DataFrame([
? ? ? ? (1, '张三', '北京'), ?# 一个元组代表是一行数据
? ? ? ? (2, '李四', '上海'),
? ? ? ? (3, '王五', '广州'),
? ? ? ? (4, '赵六', '天津'),
? ? ? ? (5, '田七', '成都')
? ? ],columns=['id','name','address'])? ? print(df)
? ? df = pd.DataFrame((
? ? ? ? (1, '张三', '北京'), ?# 一个元组代表是一行数据
? ? ? ? (2, '李四', '上海'),
? ? ? ? (3, '王五', '广州'),
? ? ? ? (4, '赵六', '天津'),
? ? ? ? (5, '田七', '成都')
? ? ), columns=['id', 'name', 'address'])? ? print(df)
? ? df = pd.DataFrame([
? ? ? ? [1, '张三', '北京'], ?# 一个元组代表是一行数据
? ? ? ? [2, '李四', '上海'],
? ? ? ? [3, '王五', '广州'],
? ? ? ? [4, '赵六', '天津'],
? ? ? ? [5, '田七', '成都']
? ? ], columns=['id', 'name', 'address'])
? ? # 2. dataFrame的相关API:
? ? # 2.1 表示多少行
? ? print(len(df))
? ? # 2.2 有多少个单元格
? ? print(df.size)? ? # 2.3 遍历df
? ? for columnName in df:
? ? ? ? print(columnName)
? ? ? ? for value in df[columnName]:
? ? ? ? ? ? print(value)? ? # 2.4 获取某一列数据, 相当于获取这一列的series对象
? ? s_name = df['name']
? ? print(s_name)? ? v = df['address'][0]
? ? print(v)? ? # 2.5 获取前N行 或者 后 N行
? ? print(df.head(3))
? ? print(df.tail(3))? ? # 3- DF的相关运算操作
? ? df = pd.DataFrame(data={
? ? ? ? 'id': [1, 2, 3, 4, 5],
? ? ? ? 'name': ['张三', '李四', '王五', '赵六', '田七'],
? ? ? ? 'address': ['北京', '上海', '广州', '天津', '成都']
? ? })? ? print(df * 5)
? ? # print(df + 1) ?报错, 因为 字段中有字符串类型的数据列
? ? # 针对索引来计算, 将相同索引的对应的列进行计算操作
? ? df1 = pd.DataFrame(data={
? ? ? ? 'id': [1, 2, 3, 4, 5],
? ? ? ? 'age': [20,30,41,15,13]
? ? ? ??
? ? },index=[0,1,2,'D','E'])? ? df2 = pd.DataFrame(data={
? ? ? ? 'id': [2, 4, 5, 1, 5],
? ? ? ? 'age': [18,15,16,12,13]? ? })
? ? print(df1 * df2)
Pandas数据类型 | 说明 | 对应的Python类型 |
---|---|---|
Object | 字符串类型 | string |
int | 整数类型 | int |
float | 浮点数类型 | float |
datetime | 日期时间类型 | datetime包中的datetime类型 |
timedelta | 时间差类型 | datetime包中的timedelta类型 |
category | 分类类型 | 无原生类型,可以自定义 |
bool | 布尔类型 | True,False |
nan | 空值类型 | None |
4.pandas多格式数据读写
文件格式 | 读取函数 | 写入函数 |
---|---|---|
xlsx | pd.read_excel | df.to_excel |
xls | pd.read_excel | df.to_excel |
csv | pd.read_csv | df.to_csv |
tsv | pd.read_csv | df.to_csv |
json | pd.read_json | to_json |
html | pd.read_html | df.to_html |
sql | pd.read_sql | df.to_sql |
剪贴板 | df.read_clipboard | df.to_clipboard |