Pandas 是 Python 语言的一个扩展程序库,用于数据挖掘和数据分析,同时也提供数据清洗功能。
pandas(panel data & data analysis),是基于 numpy(提供高性能的矩阵运算)专门用于数据分析的工具,是一个强大的分析结构化数据(表格数据)的工具集;
Pandas所有的操作都基于两种结构: DataFrame结构 和 Series结构
DataFrame 是 Pandas 中的一个 表格型 的数据结构,是一个二维的数组结构,类似二维数组。包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等)。
表格有三部分组成,表头(列索引)、行名称(行索引)、数据元素部分。
pandas.DataFrame( data, index, columns, dtype, copy)
方式 1:使用列表 逐个传入行索引、列索引和 数据元素
df = pd.DataFrame(
# 使用 列表嵌套 构造数据
data=[
['zs', 19, 1],
['ls', 20, 1],
['ww', 19, 2]
],
index=['stu0', 'stu1', 'stu2'], # 行索引
columns=['name', 'age', 'group'] # 列索引
# 如果不指定行索引---默认给一个0、1、2、3、... 这样的序号行索引
# 如果不指定列索引---默认给一个0、1、2、3、... 这样的序号列索引
)
print('df:\n', df)
print('df_type:\n', type(df))
"""
df:
name age group
stu0 zs 19 1
stu1 ls 20 1
stu2 ww 19 2
df_type:
"""
方式 2:借助字典
df = pd.DataFrame(
# 字典的键 (Key) 对应 列索引
# 字典的值(Value)对应 数据元素
data={
'name': ['zs', 'ls', 'ww'],
'age': [18, 19, 29],
'group': [1, 1, 2]
},
index=['stu0', 'stu1', 'stu2'], # 行索引
)
print('df:\n', df)
print('df_type:\n', type(df))
"""
df:
name age group
stu0 zs 18 1
stu1 ls 19 1
stu2 ww 29 2
df:
"""
方式 3:由 ndarray 转化为 dataframe结构
import numpy
values = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print('values:\n', values)
print('values_type:', type(values))
"""
values:
[[1 2 3 4]
[5 6 7 8]]
values_type:
"""
df = pd.DataFrame(
data=values, # 数据
columns=['一','二','三','四'], # 列索引
)
print('df:\n', df)
print('df_type:\n', type(df))
"""
df:
一 二 三 四
0 1 2 3 4
1 5 6 7 8
df_type:
"""
注:关于参数元素缺失
df = pd.DataFrame(
data=[
['zs', 19, 1],
['ls', 20, 1],
['ww', 19] # data数据元素缺失会自动用NaN补齐
],
index=['stu0', 'stu1', 'stu2'], # index与data行数量不对应会报错
columns=['name', 'age', 'group'] # columns与data列数量不对应会报错
)
print('df:\n', df)
"""
df:
name age group
stu0 zs 19 1.0
stu1 ls 20 1.0
stu2 ww 19 NaN
"""
data=[
['zs', 19, 1],
['ls', 20, 1],
['ww', 19, 2]
],
df = pd.DataFrame(
data=data
columns=['name', 'age', 'group'],
)
print('dtypes:\n', df.dtypes)
'''
dtypes:
name object
age int64
group int64
dtype: object
'''
df = pd.DataFrame(
data=data
columns=['name', 'age', 'group'],
dtype="int32"
)
print('dtypes:\n', df.dtypes)
'''
df:
name object
age int32
group int32
dtype: object
'''
df = pd.DataFrame(
data=data
columns=['name', 'age', 'group'],
dtype=numpy.
)
print('dtypes:\n', df.dtypes)
'''
df:
name object
age int32
group int32
dtype: object
'''
Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。Series 由索引(index)和 列 组成
DataFrame结构就是 由多个Series结构组成的:
df = pd.DataFrame(
data=[
['zs', 19, 1],
['ls', 20, 1],
['ww', 19, 2]
],
index=['stu0', 'stu1', 'stu2'],
columns=['name', 'age', 'group'],
)
print('name:\n', df["name"])
print("*"*20)
print('name_type:\n', type(df["name"]))
'''
name:
stu0 zs
stu1 ls
stu2 ww
Name: name, dtype: object
********************
name_type:
'''
pandas.Series( data, index, dtype, name, copy)
Serise的参数与Dataframe的参数相似:
df= pd.Series([1, 2, 3])
print("df:\n", df)
'''
df:
0 1
1 2
2 3
dtype: int64
'''
se = pd.Series(
data={'zs': 17, 'ls': '18', 'ww': 18},
# 可以用字典指定索引和值
index=['zs', 'ls', 'ww', 'jj'], # 指定key为行索引,如果没有对应的value值,那么会用NaN补齐
# 如果index和data字典的键不同,则使用index指定的索引
)
print('se:\n',se)
print('se_type:\n',type(se))
'''
se:
zs 17
ls 18
ww 18
jj NaN
dtype: object
se_type:
'''
import pandas as pd
# 创建DataFrame结构
df = pd.DataFrame(
data=[
['zs', 19, 1],
['ls', 20, 1],
['ww', 19, 2]
],
index=['stu0', 'stu1', 'stu2'],
columns=['name', 'age', 'group']
)
print('df:\n', df)
print('df_type:\n', type(df)) #
print('ndim:', df.ndim) # DataFrame结构(int):2 --->二维的结构
print('shape:', df.shape) # DataFrame的行列数(tuple): (3,3)
print('size:', df.size) # DataFrame的数据数量:9
# print('dtype:', df.dtype) # 'DataFrame' object has no attribute 'dtype'
print('dtypes:\n', df.dtypes) # 返回每一列的数据类型-(组成了一个Series)----不同的列数据类型可以不同! ---注意:DataFrame可以存储不同类型的数据
print('index:', df.index) # 获取的是DataFrame的行索引
print('columns:', df.columns) # 获取的是Dataframe的列索引
print('values:\n', df.values) # 数据
print('values_type:\n', type(df.values)) #
print("-"*80)
# 获取 Series -----Series结构---一维的数据 ------>行维度
se = df['name']
print('se:\n', se)
print('se:\n', type(se)) #
print('ndim:', se.ndim) # 1
print('shape:', se.shape) # (3,)
print('size:', se.size) # 3
print('name:', se.name) # name
# print('itemsize:', se.itemsize) # 每个数据所占的字节,当前版本可能还有,但是未来要被删除!
print('dtype:', se.dtype) # object
print('dtypes:', se.dtypes) # object, Series各个列内部的数据类型都是一样的,所以具有dtype
print('index:',se.index) # 行索引
print('values:',se.values) # 数据