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。
PandasDataFrame数据操作与属性详解
本文详细介绍了PandasDataFrame的基本属性如索引、列标签和数据类型,以及常用的数据信息获取方法如`info()`,以及行与列的检索技巧,包括`head()`、`tail()`、`loc`和`iloc`等函数的使用。
729

被折叠的 条评论
为什么被折叠?



