DataFrame 数据信息属性和检索
DataFrame 属性和检索
建立一个随机数据(DataFrame),其行标签为年份,列标签为10天干,数据值为1~100的随机整数。
import pandas as pd
import numpy as np
years = pd.date_range("2002", periods=21, freq="A").year
# years
columns = list("甲乙丙丁戊己庚辛壬癸")
df = pd.DataFrame({ col: pd.Series(np.random.randint(1, 100, len(years)), index=years) for col in columns })
# df
数据信息总览
数据信息 - DataFrame.info()
默认参数全为空值且顾名思义。
df.info(verbose=None, buf=None, max_cols=None, memory_usage=None, show_counts=None)
df.info(max_cols=4) # 10列,大于4,不输出列的详情
<class ‘pandas.core.frame.DataFrame’>
Index: 21 entries, 2002 to 2022
Columns: 10 entries, 甲 to 癸
dtypes: int32(10)
memory usage: 924.0 bytes
行列标签 - DataFrame.index & DataFrame.columns
行标签和列标签都是基本属性。
df.index
df.columns
数据类型 - Data.dtypes
一个由各列数据类型组成的 Series
。
df.dtypes
甲 int32
乙 int32
…
癸 int32
dtype: object
其他【查看数据描述】的常用属性与方法
DataFrame.values
,值部分,是一个数组,建议使用DataFrame.to_numpy()
。DataFrame.axes
,坐标,即行列标签。DataFrame.ndim
,维度,2;Series - 1。DataFrame.shape
,形状,行数和列数组成的一个元组。DataFrame.size
,行数×列数。DataFrame.memory_usage()
,返回各列内存使用情况组成的Series
。DataFrame.empty
,是否为空,布尔值。
检索方法
首尾部检索方法语法简单,DataFrame 调用则返回一个 DataFrame;Series 亦然。
首部 - DataFrame.head(n=5)
n 是一个默认参数,默认为5,此方法相当于 DataFrame[:n]
,即对首部的 n 行进行检索。
df.head() # df[:5]
df.head(4) # df[:4]
type(df.head()) # DataFrame
尾部 - DataFrame.tail(n=5)
尾部检索相当于 DataFrame[-n:]
df.tail() # df[-5:]
df.tail(10) # df[-10:]
行与列的检索
经常来说,检索具有一定属性的某行(列)、某些行(列)是很必要的。
- 一列
- 通过列标签直接索引,
DataFrame[列标签]
,返回一个 Series 对象。
- 多列
- 通过标签列表直接索引,
DataFrame[col_list]
,返回一个 DataFrame 对象。
- 一行
- 通过定位行标签或定位行数,见 here
- 多行
- 通过行切片语法切片,
DataFrame[0:3]
,返回一个切片的 DataFrame。
定位检索
这里新建一个标签易于分辨的 DataFrame
。
df2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]], index=list("甲乙丙丁"), columns=['A', 'B', 'C'])
df2.loc["甲"]
df2.loc[["甲", "丁"]]
df2.loc["甲":"丙"]
df2.loc[["甲", "乙"], ["A", "B"]]
df2.loc["甲":"丙", ["A", "B"]]
df2.loc["乙", "A"] # df2.at["乙", "A"]
df2.iloc[1]
df2.iloc[[0, 2]]
df2.iloc[1:]
df2.iloc[[0, 2], [1, 2]]
df2.iloc[[0, 2], :]
df2.iloc[2, 1] # df2.iat[2, 1]
定位标签 - loc/at
根据标签进行定位。
-
获取某行
DataFrame.loc[行标签]
-
获取多行
DataFrame.loc[[行标签1, 行标签2, ...]]
,和多维数组的定位类似。DataFrame.loc[行标签m: 行标签n]
,和切片类似的语法。注意,冒号的前一个参数不写默认从第一个开始,冒号后一个参数不写默认到最后一个结束。
- 行列标签结合定位:获取指定列标签的多行数据
DataFrame.loc[行标签们, 列标签们]
,其中标签们的格式可以是:列表格式[标签1, 标签2, ...]
或切片格式标签m: 标签n
。- 特别的,
DataFrame[行标签, 列标签]
定位到一个指定位置,一般使用at
。
定位位置 - iloc/iat
根据行列位置进行定位。注意行列数都是从0开始数的。
-
获取某行
DataFrame.iloc[行数]
-
获取多行
DataFrame.iloc[[行数1, 行数2, ...]]
,和多维数组的定位类似。DataFrame.iloc[行数m: 行数n]
,和切片类似的语法。注意,冒号的前一个参数不写默认从第一个开始,冒号后一个参数不写默认到最后一个结束。
- 行列标签结合定位:获取指定列标签的多行数据
DataFrame.iloc[行数们, 列数们]
,其中标签们的格式可以是:列表格式[数1, 数2, ...]
或切片格式数m: 数n
。- 特别的,
DataFrame[行数, 列数]
定位到一个指定位置,一般使用iat
。