Pandas-核心数据类型
一、什么是Pandas
- Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
- Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。
- Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。
- Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。
- Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
- Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。
Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
二、Series
Series是一种类似于字典(dict-like)的一维数组(array-like)的对象,由下面两个部分组成:
- values:一组数据(ndarray类型)
- index:相关的数据索引标签
import numpy as np
import pandas as pd
1. 构造Series:pd.Series(data, index)
index用来指定Series对象的显示索引,如果没有显示设置索引,则默认使用隐式(数组索引)索引填充。
1.1 From ndarray:使用ndarray构造,得到一个引用对象
arr1 = np.random.randint(0, 10, size=5)
print(arr1)
>>输出结果:
[4, 0, 3, 5, 1]
s1 = pd.Series(data=arr1)
print(s1)
>>输出结果:
0 4
1 0
2 3
3 5
4 1
dtype: int32
s2 = pd.Series(data=arr1, index=['A','B','C','D','E'])
print(s2)
>>输出结果:
A 4
B 0
C 3
D 5
E 1
dtype: int32
# 注意:使用ndarray创建的Series是一个引用对象,当原数组中的值发生改变,Series也会随之改变
arr1[0] = 100
print(s1)
>>输出结果:
0 100
1 0
2 3
3 5
4 1
dtype: int32
From List:使用列表构造,得到一个副本对象
l1 = [1,2,3,4]
s3 = pd.Series(data=l1, index=list('ABCD'))
print(s3)
>>输出结果:
A 1
B 2
C 3
D 4
dtype: int64
# 注意:使用列表创建的Series是一个副本对象,当原列表中的值发生改变,Series不会改变
l1[0] = 100
print(li)
>>输出结果:
[100, 2, 3, 4]
print(s3)
>>输出结果:
A 1
B 2
C 3
D 4
dtype: int64
From dict:使用字典构造
# 字典构造的Sereis,默认使用字典的key作为Series的显示索引,valeus作为Series的值
user_info = {
'name': 'aaa',
'age': 20,
'address': 'A'
}
s4 = pd.Series(data=user_info)
print(s4)
>>输出结果:
name aaa
age 20
address A
dtype: object
# 如果在使用字典构造Series时传入了index,那么要确保index与字典中的键相同,否将无法获得到值,得到一个空值NaN
s5 = pd.Series(data=user_info, index=['A','B','C'])
print(s5)
>>输出结果:
A NaN
B NaN
C NaN
dtype: object
s6 = pd.Series(data=user_info, index=['name','address','A'])
print(s6)
>>输出结果:
name aaa
address A
A NaN
dtype: object
From scalar value:使用一个标量(常量或变量)构造时,必须指定index,标量会被重复匹配到每一个index
index = list('ABCDE')
s1 = pd.Series(data=6, index=index)
print(s1)
>>输出结果:
A 6
B 6
C 6
D 6
E 6
dtype: int64
2. Series属性
- name 返回Series对象的名字
- shape 返回Series对象的形状
- size 返回Series对象的元素个数
- index 返回Series对象的显示索引
- values 返回Sereis对象的所有元素值
注意:在设置Series的index时,避免用以上关键字作为index标签
s = pd.Series(data=[1,2,3], index=list('ABC'))
print(s)
>>输出结果:
A 1
B 2
C 3
dtype: int64
s1 = pd.DataFrame(pd.Series(data=[1,2,3], index=list('ABC'),name='轩小陌'))
print(s1)
>>输出结果:
轩小陌
A 1
B 2
C 3
print(s.shape)
>>输出结果:
(3,)
print(s.index)
>>输出结果:
Index(['A', 'B', 'C'], dtype='object')
print(s.values)
>>输出结果:
array([1, 2, 3], dtype=int64)
print(s.size)
>>输出结果:
3
3. Sereis的数学运算
Series对大多数NumPy的函数都是兼容的
3.1 与非pandas对象运算,服从广播机制原则
s = pd.Series(data=[1,2,3], index=list('ABC'))
print(s)
>>输出结果:
A 1
B 2
C 3
dtype: int64
print(s + 1)
>>输出结果:
A 2
B 3
C 4
dtype: int64
arr1 = np.array([1,2,3])
print(s + arr1)
>>输出结果:
A 2
B 4
C 6
dtype: int64
3.2 NumPy functions
arr1 = np.power(np.array([1,2,3]), 2)
result = np.power(s,2)
print(result)
>>输出结果:
A 1
B 4
C 9
dtype: int64
3.3 Series之间运算
- 索引对齐原则
s = pd.Series(data=[1,2,3], index=list('ABC'))
print(s)
>>输出结果:
A 1
B 2
C 3
dtype: int64
s1 = pd.Series(data=np.array([2,3,4]), index=['C','A','B'])
print(s1)
>>输出结果:
C 2
A 3
B 4
dtype: int32
print(s + s1)
>>输出结果:
A 4
B 6
C 5
dtype: int64
s2 = pd.Series(data=[2,3,4], index=['A','C','D'])
print(s2)
>>输出结果:
A 2
C 3
D 4
dtype: int64
print(s1 + s2)
>>输出结果:
A 5.0
B NaN
C 5.0
D NaN
dtype: float64
- 索引对不齐会得到空值, 可以使用add\sub\mul\div函数处理空值后再相加
s2 = pd.Series(data=[2,3,4], index=['A','C','D'])
print(s2)
>>输出结果:
A 2
C 3
D 4
dtype: int64
print(s1 + s2)
>>输出结果:
A 5.0
B NaN
C 5.0
D NaN
dtype: float64
三、DataFrame
DataFrame是一个二维的表格型数据结构,可以看做是由Series组成的字典(共用同一个索引)。
DataFrame由按一定顺序排列的【多列】数据组成,每一列的数据类型可能不同。
设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values(numpy的二维数组)
1. 构造DataFrame
pd.DataFrame(data, index, columns, copy=False)
-
data=None 用于构造DataFrame的数据
-
index=None, columns=None, 行列索引
-
dtype=None, 数据类型
-
copy=False
data = np.random.randint(0, 100, size=(3,4))
index = ['tom','lucy','alex']
columns = ['语文','数学','物理','化学']
data = pd.DataFrame(data=data, index=index, columns=columns)
print(data)
>>输出结果:
语文 数学 物理 化学
tom 63 66 79 15
lucy 13 91 24<