Pandas df.tail() 函数
tail() 是 Pandas DataFrame 和 Series 中的重要函数,用于查看数据集的末尾部分。它返回最后 n 行数据,让我们在不遍历整个数据集的情况下,快速了解数据的结尾情况和最新记录。
在时间序列数据分析中,tail() 特别有用,因为通常我们关心的是最新的数据,比如最近的股价、销量或传感器读数。这个函数与 head() 互为补充,一起构成了数据探索的基础工具。
基本语法与参数
tail() 是 DataFrame 和 Series 的成员函数,通过点运算符 . 来调用。它与 head() 的使用方法完全相同,只是查看的方向相反。
语法格式
DataFrame.tail(n=5) Series.tail(n=5)
参数说明
| 参数 | 类型 | 是否必填 | 说明 | 默认值 |
|---|---|---|---|---|
| n | int | 可选 | 返回最后 n 行数据。如果 n 大于总行数,则返回全部数据。 | 5 |
返回值说明
- 返回值类型: 当调用者是 DataFrame 时,返回一个 DataFrame;当调用者是 Series 时,返回一个 Series。
- 返回行数: 最多返回 n 行,如果数据行数少于 n,则返回全部数据。
- 索引保留: 返回的数据保留原始 DataFrame 的索引值。
实例
让我们通过例子全面掌握 tail() 的用法。
示例 1:基础用法 - 查看 DataFrame 后几行
创建 DataFrame 并使用 tail() 查看末尾数据。
实例
import pandas as pd
# 创建一个示例 DataFrame
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Henry', 'Iris', 'Jack'],
'age': [18, 19, 17, 18, 20, 19, 18, 17, 19, 18],
'score': [85, 92, 78, 90, 88, 95, 82, 76, 89, 91],
'grade': ['A', 'A', 'B', 'A', 'B', 'A', 'B', 'C', 'B', 'A']
}
df = pd.DataFrame(data)
# 默认返回最后 5 行
print("默认最后 5 行:")
print(df.tail())
# 指定返回最后 3 行
print("n最后 3 行:")
print(df.tail(3))
# 返回最后 7 行
print("n最后 7 行:")
print(df.tail(7))
# 创建一个示例 DataFrame
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Henry', 'Iris', 'Jack'],
'age': [18, 19, 17, 18, 20, 19, 18, 17, 19, 18],
'score': [85, 92, 78, 90, 88, 95, 82, 76, 89, 91],
'grade': ['A', 'A', 'B', 'A', 'B', 'A', 'B', 'C', 'B', 'A']
}
df = pd.DataFrame(data)
# 默认返回最后 5 行
print("默认最后 5 行:")
print(df.tail())
# 指定返回最后 3 行
print("n最后 3 行:")
print(df.tail(3))
# 返回最后 7 行
print("n最后 7 行:")
print(df.tail(7))
运行结果:
默认最后 5 行:
name age score grade
5 Frank 19 95 A
6 Grace 18 82 B
7 Henry 17 76 C
8 Iris 19 89 B
9 Jack 18 91 A
最后 3 行:
name age score grade
7 Henry 17 76 C
8 Iris 19 89 B
9 Jack 18 91 A
最后 7 行:
name age score grade
3 David 18 90 A
4 Eve 20 88 B
5 Frank 19 95 A
6 Grace 18 82 B
7 Henry 17 76 C
8 Iris 19 89 B
9 Jack 18 91 A
代码解析:
- DataFrame 有 10 行数据,索引从 0 到 9。
df.tail()返回索引为 5 到 9 的最后 5 行。df.tail(3)只返回最后 3 行,索引为 7、8、9。- 注意索引值保留了原始 DataFrame 的索引,不是从 0 开始重新编号。
示例 2:查看 Series 的后几行
tail() 同样适用于 Series 对象。
实例
import pandas as pd
# 创建一个 Series
s = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
# 查看最后 3 个元素
print("最后 3 个元素:")
print(s.tail(3))
# 创建带索引的 Series
s2 = pd.Series([100, 200, 300, 400, 500], index=['a', 'b', 'c', 'd', 'e'])
print("n带索引 Series 的最后 2 个元素:")
print(s2.tail(2))
# 创建一个 Series
s = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
# 查看最后 3 个元素
print("最后 3 个元素:")
print(s.tail(3))
# 创建带索引的 Series
s2 = pd.Series([100, 200, 300, 400, 500], index=['a', 'b', 'c', 'd', 'e'])
print("n带索引 Series 的最后 2 个元素:")
print(s2.tail(2))
运行结果:
最后 3 个元素: 7 80 8 90 9 100 dtype: int64 带索引 Series 的最后 2 个元素: d 500 e 600 dtype: int64
代码解析:
- Series 的
tail()方法返回最后 n 个元素,保留原始索引。 - 自定义索引的 Series 同样适用,返回末尾对应的元素。
示例 3:时间序列数据中应用
在处理时间序列数据时,tail() 特别有用,可以快速查看最新的数据记录。
实例
import pandas as pd
import numpy as np
# 创建一个时间序列 DataFrame,模拟股票数据
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=30, freq='D')
prices = 100 + np.cumsum(np.random.randn(30)) # 模拟股价走势
stock_df = pd.DataFrame({
'date': dates,
'price': prices.round(2),
'volume': np.random.randint(1000, 10000, 30)
})
print("完整数据的前几行和后几行对比:")
print("n前 5 行:")
print(stock_df.head())
print("n最后 5 行:")
print(stock_df.tail())
# 使用 tail 查看最新几天的数据
latest_data = stock_df.tail(7)
print("n最近 7 天的数据:")
print(latest_data)
# 可以对 tail 结果进行进一步分析
print("n最近 7 天的平均价格:", latest_data['price'].mean())
print("最近 7 天的总成交量:", latest_data['volume'].sum())
import numpy as np
# 创建一个时间序列 DataFrame,模拟股票数据
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=30, freq='D')
prices = 100 + np.cumsum(np.random.randn(30)) # 模拟股价走势
stock_df = pd.DataFrame({
'date': dates,
'price': prices.round(2),
'volume': np.random.randint(1000, 10000, 30)
})
print("完整数据的前几行和后几行对比:")
print("n前 5 行:")
print(stock_df.head())
print("n最后 5 行:")
print(stock_df.tail())
# 使用 tail 查看最新几天的数据
latest_data = stock_df.tail(7)
print("n最近 7 天的数据:")
print(latest_data)
# 可以对 tail 结果进行进一步分析
print("n最近 7 天的平均价格:", latest_data['price'].mean())
print("最近 7 天的总成交量:", latest_data['volume'].sum())
运行结果:
完整数据的前几行和后几行对比:
前 5 行:
date price volume
0 2024-01-01 100.34 5234
1 2024-01-02 99.87 3421
2 2024-01-03 100.21 6789
3 2024-01-04 98.45 4321
4 2024-聚合-05 99.12 5654
最后 5 行:
date price volume
25 2024-01-26 102.45 4321
26 2024-01-27 103.12 5678
27 2024-01-28 101.89 6543
28 2024-01-29 104.23 3211
29 2024-01-30 103.87 4532
最近 7 天的数据:
date price volume
23 2024-01-24 101.56 4321
24 2024-01-25 102.01 5432
25 2024-01-26 <td> 45 4321
26 2024-01-27 103.12 5678
27 2024-01-28 101.89 6543
28 2024-01-29 104.23 3211
29 2024-01-30 103.87 4532
最近 7 天的平均价格: 102.79
最近 7 天的总成交量: 34938
代码解析:
- 创建了一个包含 30 天股价数据的 DataFrame。
tail()快速定位到最新的数据记录。- 对
tail()返回的数据可以继续调用其他函数进行计算分析。 - 这个模式在实时数据分析场景中非常实用。
注意事项
tail()不会修改原始 DataFrame 或 Series,它返回一个新的对象。- 当 n 小于等于 0 时,返回空 DataFrame 或空 Series。
- 对于大型数据集,
tail()比加载全部数据更高效,因为它不需要读取整个文件。 tail()与head()经常一起使用,全面了解数据的两端情况。
提示:在数据分析的探索阶段,建议同时使用
head()和tail(),这样可以快速判断数据是否按预期排序,以及数据的完整性。
小结
tail() 是 Pandas 中用于查看数据末尾部分的函数,与 head() 互为补充。它在时间序列分析、实时数据监控、日志分析等场景中特别有用。
掌握 head() 和 tail() 这两个函数,就能够快速了解数据集的开头和结尾,这在数据探索阶段是非常重要的第一步。结合 info() 和 describe() 等函数,我们可以全面把握数据的特征和分布情况。

Pandas 常用函数