Pandas是一个开源的Python数据分析库,提供了高性能、易于使用的数据结构和数据分析工具。它是基于NumPy库构建的,使得数据预处理、清洗、分析变得更加快速和简单。Pandas主要有两种类型的数据结构:Series
(一维数组)和DataFrame
(二维表格)。
注意:和Numpy相比,Pands的计算速度会慢一些,它更侧重于数据处理。
安装
如果你还没有安装Pandas,可以通过pip安装:
pip install pandas
导入
导入Pandas库,通常我们给它一个别名pd
:
import pandas as pd
Series
Pandas 的 Series
是一个一维的标签化数组,能够存储任何数据类型(整数、字符串、浮点数、Python 对象等)。Series
是 Pandas 中最基本的对象之一,提供了丰富的功能来进行高效的数据操作和分析。
创建 Series
你可以使用 pd.Series()
函数来创建一个 Series
对象,其基本语法如下:
pd.Series(data=None, index=None, dtype=None, name=None)
data
:数据,可以是列表、字典、ndarray 等。index
:索引值,是数据标签。如果不指定,默认为RangeIndex(0, 1, 2, ...)
。dtype
:数据类型,如果不指定,将自动推断。name
:Series
的名称。
import pandas as pd
import numpy as np
# 通过列表创建 Series
s1 = pd.Series([1, 3, 5, np.nan, 6, 8])
# 通过字典创建 Series,自动使用字典键作为索引
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
# 指定索引和数据类型
s3 = pd.Series([10, 20, 30], index=['a', 'b', 'c'], dtype='float64')
Series
属性
index
:Series
的索引标签。values
:Series
的数据,以 ndarray 形式返回。dtype
:Series
中数据的类型。name
:Series
的名称,有助于标识Series
对象。
print(d.index) # Index(['a', 'b', 'c'], dtype='object')
print(d.values) # [1 2 3]
print(d.dtype) # int64
数据访问
可以通过多种方式访问 Series
中的数据:
- 使用索引标签
- 使用位置索引
- 使用切片
- 使用布尔索引
# 使用索引标签
print(s2['a'])
# 使用位置索引
print(s1[0])
# 使用切片
print(s1[1:4])
# 使用布尔索引
print(s1[s1 > 3])
Series
方法
数据选择
可以使用索引标签或位置进行数据选择和赋值。
# 使用索引标签选择数据
print(d['a']) # 1
# 使用索引位置选择数据
print(d[0]) # 1
# 修改数据
d['a'] = 10
切片和筛选
Series
支持类似 NumPy 的切片和条件筛选。
# 切片
print(d[1:3])
# 条件筛选
print(d[d > 1])
数学运算
Series
支持许多数学运算方法。
# 加法运算
print(d + d)
# 标量乘法
print(d * 2)
# 指数运算
print(d ** 2)
缺失值处理
pandas
提供了一些方法来处理缺失值。
# 判断是否为 NaN
print(d.isna())
# 填充缺失值
print(d.fillna(value=5))
# 删除缺失值
print(d.dropna())
统计方法
Series
提供了许多统计方法,可以快速了解数据的概况。
# 平均值
print(d.mean())
# 标准差
print(d.std())
字符串操作
如果 Series
的数据类型是字符串,pandas
提供了一系列字符串操作方法,这些方法通过 str
属性进行调用。
s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
# 转换为小写
print(s.str.lower())
修改 Series
Series
对象不仅可以进行数据选择和检索,还可以被修改。这包括修改Series
的数据、索引和其他属性。
修改Series
的数据
直接通过索引修改
可以通过索引直接修改Series
中的单个值或多个值。
import pandas as pd
import numpy as np
s = pd.Series([1, 3, 5, np.nan, 6, 8])
# 修改单个值
s[0] = 10
# 修改多个值
s[[1, 2]] = 20
条件修改
还可以根据条件来修改Series
中的值。
s[s > 5] = -1
修改Series
的索引
可以通过修改index
属性来更改Series
的索引。
s.index = ['a', 'b', 'c', 'd', 'e', 'f']
使用.replace()
方法
replace()
方法提供了一种方便的方式来修改Series
中的值,可以替换单个值或多个值。
# 替换单个值
s.replace(10, -10, inplace=True)
# 替换多个值
s.replace([20, -1], [200, -100], inplace=True)
使用.apply()
或.map()
方法
.apply()
方法允许你对Series
中的每个元素应用一个函数。.map()
方法也类似,但主要用于元素的替换。
# 使用.apply()方法
s.apply(lambda x: x*2)
# 使用.map()方法进行替换
s = pd.Series(['cat', 'dog', 'rabbit', 'bird'])
pet_to_owner = {'cat': 'Alice', 'dog': 'Bob', 'rabbit': 'Charlie'}
s.map(pet_to_owner)
修改Series
对象的名称
Series
对象本身也可以有一个name
属性,这在转换为DataFrame
或在某些绘图功能中特别有用。
s.name = 'Pets'