机器学习基础知识笔记
- Pandas是Python在科学计算和数据分析领域的核心模块。
- 它含有使数据分析工作变得更快更简单的高级数据结构和操作工具。
- Pandas是基于NumPy构建的,让以NumPy为中心的应用变得更加简洁。
1. Series的基本使用
- 如下代码是使用pandas的基础操作:
import pandas as pd
import numpy as np
# 1. Series是Pandas的基本结构,可以认为是一维数组,自己定义索引
s1 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s1)
# 使用索引访问数据
print(s1['a'])
# print(s1[0])
# 可以支持各种运算
print(s1**2)
print(np.exp(s1))
print(s1+1)
print(s1+s1)
print(s1 - s1)
print(s1 * s1)
print(s1 / s1)
print(s1[0:3])
# 还可以使用索引切片,这种情况会包含最后一项
print(s1['a':'d'])
array = s1.values
print(type(array))
# 直接转换为numpy数组
array1 = s1.to_numpy()
- Pandas的Series也支持布尔索引:
# 支持布尔索引, 选取s1中的偶数元素
print(s1[s1 % 2 == 0])
- 还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。
- 它可以用在许多原本需要字典参数的函数中。
dict1 = {'2019':1000, '2020':1200,'2022':1500}
s2 = pd.Series(dict1)
print(s2)
- 我们也可以为Series对象更换索引列表,但是替代索引列表中的值与原索引列表中的值一致则保留,不一致则新增索引,但对应的值为NA(缺失值)。
# 更换索引
s3 = pd.Series(s1, index=['a', 'b', 'c', 'f'])
print(s3)
- Series最重要的一个功能是:它在算术计算中会自动补齐不同索引的数据:
# 数据计算
s1 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
s2 = pd.Series([7, 8, 9, 10], index=['a', 'b', 'f', 'g'])
print(s1 + s2)
可以看到最后的计算结果的index是s1和s2的并集,不能进行计算的会取NAN值,在这种情况下,进行数组计算的时候不再需要考虑数组的形状是否相同。
- Series的删除机制:
# 删除机制
s3 = s1.drop(['a'])
print(s3)
2. DataFrame的基本使用
- DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值)等。
- DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
- 跟其他类似的数据结构相比,DataFrame中面向行和面向列的操作基本上是平衡的。
- 其实,DataFrame中的数据是以一个或多个二维块存放的。
- 首先是dataframe的创建,代码如下:
import pandas as pd
import numpy as np
# 二维结构 DataFrame
df1 = pd.DataFrame([['zhangsan', 20, '男'],
['lihong', 20, '女']])
print(df1)
# 也可以指定索引
df1 = pd.DataFrame([['zhangsan', 20, '男'],
['lihong', 20, '女']], index=['a', 'b'], columns=['姓名','年龄','性别'])
print(df1)
- dataframe 的访问操作有两种方式,代码如下:
print(df1)
print("============================")
print(df1['姓名'])
print(df1.姓名) # 这种不建议去使用
- dataframe的运算:
df2 = pd.DataFrame([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]], index=['r1', 'r2'], columns=['c1,', 'c2', 'c3', 'c4', 'c5'])
df2['c6'] = pd.DataFrame([1], index=['r1'])
print(df2)
df2['c7'] = 10
print(df2)
df3 = pd.DataFrame([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]], index=['r1', 'r2'], columns=['c1,', 'c2', 'c3', 'c4', 'c5'])
print(df2 + df3)
pandas索引匹配机制比numpy的数组运算更灵活,不需要保证两个数组的形式完全相同。
# 删除机制
df4 = df3.drop(columns=['c1'])
print(df4)
- Pandos的文件操作:
import pandas as pd
df1 = pd.DataFrame([['zhangsan', 20, '男'],
['lihong', 20, '女']], index=['a', 'b'], columns=['姓名','年龄','性别'])
df1.to_csv('a.csv', encoding='utf_8_sig', index=False)
df2 = pd.read_csv('a.csv', encoding='utf_8_sig')
print(df2)
df1.to_excel('a.xlsx', index=False)
pd.read_excel('a.xlsx')
print(df2)