深入浅出Pandas:利用Python进行数据处理与分析
上QQ阅读APP看书,第一时间看更新

4.2 数据的信息

本节主要介绍DataFrame的基础信息和统计性信息。在我们拿到一个数据集,用Pandas载入后,需要做一些初步的验证,比如行名、列名是否一致,数据量是否有缺失,各列的数据类型等,让我们对数据的全貌有所了解。

本节介绍的大多数功能对Series也是适用的。

4.2.1 查看样本

加载完的数据可能由于量太大,我们需要查看部分样本数据,Pandas提供了三个常用的样式查看方法。

  • df.head():前部数据,默认5条,可指定条数。
  • df.tail():尾部数据,默认5条,可指定条数。
  • df.sample():一条随机数据,可指定条数。
df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')
s = df.Q1 # 取其中一列,形成Series
df.head() # 查看前5条数据
'''
    name team  Q1  Q2  Q3  Q4
0  Liver    E  89  21  24  64
1   Arry    C  36  37  37  57
2    Ack    A  57  60  18  84
3  Eorge    C  93  96  71  78
4    Oah    D  65  49  61  86
'''

其他方法的使用如下:

df.head(10) # 查看前10条数据
s.tail() # 查看后5条数据
df.tail(10) # 查看后10条数据
df.sample() # 随机查看一条数据
s.sample(3) # 随机查看3条数据

4.2.2 数据形状

执行df.shape会返回一个元组,该元组的第一个元素代表行数,第二个元素代表列数,这就是这个数据的基本形状,也是数据的大小。

df.shape
# (100, 6)
# 共100行6列(索引不算)

# Series 只有一个值
s.shape
# (100,)

4.2.3 基础信息

执行df.info会显示所有数据的类型、索引情况、行列数、各字段数据类型、内存占用等。Series不支持。

df.info
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   name    100 non-null    object
 1   team    100 non-null    object
 2   Q1      100 non-null    int64
 3   Q2      100 non-null    int64
 4   Q3      100 non-null    int64
 5   Q4      100 non-null    int64
dtypes: int64(4), object(2)
memory usage: 4.8+ KB
'''

4.2.4 数据类型

df.dtypes会返回每个字段的数据类型及DataFrame整体的类型。

df.dtypes
'''
name    object
team    object
Q1       int64
Q2       int64
Q3       int64
Q4       int64
dtype: object
'''

如果是Series,需要用s.dtype:

s.dtype
# dtype('int64')

4.2.5 行列索引内容

df.axes会返回一个列内容和行内容组成的列表[列索引, 行索引]。

df.axes
'''
[RangeIndex(start=0, stop=100, step=1),
 Index(['name', 'team', 'Q1', 'Q2', 'Q3', 'Q4'], dtype='object')]
'''

Series显示列索引,就是它的索引:

s.axes
# [RangeIndex(start=0, stop=100, step=1)]

4.2.6 其他信息

除以上重要的几项信息外,以下信息也比较重要:

# 索引对象
df.index
# RangeIndex(start=0, stop=100, step=1)
# 列索引,Series不支持
df.columns
# Index(['name', 'team', 'Q1', 'Q2', 'Q3', 'Q4'], dtype='object')
df.values # array(<所有值的列表矩阵>)
df.ndim # 2 维度数
df.size # 600行×列的总数,就是总共有多少数据
# 是否为空,注意,有空值不认为是空
df.empty # False
# Series的索引,DataFrame的列名
df.keys()

此外,Series独有以下方法:

s.name # 'Q1'
s.array # 值组成的数组 <PandasArray>
s.dtype # 类型,dtype('int64')
s.hasnans # False

s.name可获取索引的名称,需要区分的是上例数据中df.name也能正常执行,它其实是df调用数据字段的方法,因为正好有名为name的列,如果没有就会报错,DataFrame是没有此属性的。

4.2.7 小结

本节数据信息的操作让我们对数据有了一个全面的认识,这对数据的下一步分析至关重要,加载完数据后,推荐先进行以上操作,以便及早找到数据的质量问题。