Python:pandas(三)——DataFrame
2021-03-02 20:35 ShineLe 阅读(271) 评论(0) 编辑 收藏 举报官方文档:pandas之DataFrame
1、构造函数
用法:
pandas.DataFrame( data=None, index=None, columns=None, dtype=None, )
参数:
参数 | 类型 | 说明 |
data | ndarray、iterable、dict、DataFrame | 用于构造DataFrame的数据 |
index | Index或array | 各行的索引列 |
columns | Index或array | 各列的索引行 |
2、属性
访问方式为:df.xxx(没有括号)
写在最前:可以通过 df.列名 的方式访问某一列
属性 | 说明 |
at | 通过行/列标签访问单个值(如dataframe.at[1,\'B\']) |
axes | 返回一个List,其中每个元素记录了其对应axes的全部索引值 |
columns | 列标签 |
index | 行标签 |
dtypes | DataFrame中值的类型 |
empty | 指示器,指示该DataFrame是否为空 |
iat | 区别于at,是用整数索引的方式访问单个值,如dataframe.iat[1,2]表示第2行第3列(即at中的第C列) |
loc | 通过①行/列标签组或②布尔数组的形式访问一组数据,方式②的作用方式同布尔索引 |
iloc | 通过整数或整数List的方式访问一组数据,详见下边的iloc部分 |
ndim | 维数 |
shape | 返回一个tuple,表示各个维度的大小 |
size | 元素数——单元格的数量,并不是行数 |
style | 返回Style对象 |
values | 返回该DataFrame的array形式(建议用方法to_numpy()) |
2.5、部分属性的详细说明
2.5.1、访问单个值:at与iat
①at
用法:df.at[ 1 , \'B\' ]——访问行1,列\'B\'的值
②iat
用法:df.iat[ 1 , 1 ]——访问行1,列1(即列\'B\')的值
2.5.2、访问多个值:loc与iloc
①loc
说明:通过行/列标签组或布尔索引组的形式访问一组数据
用法:
df.loc[ 输入1 [, 输入2] ]
输入1表示哪些行,输入2表示哪些列
允许输入的值:
a、单个label,如5、\'a\';必须是label中有的值,不能用数字代指某列
b、label的list,如[\'a\' ,\'b\' , \'c\'];
c、切片,如 \'a\':\'f\'(从\'a\'到\'f\',a与f均包含)。
d、与对应维度尺寸大小相同的boolean array,如[True , False , True]
e、alignable boolean Series
例子:
df.loc[pd.Series([False, True, False], index=[\'viper\', \'sidewinder\', \'cobra\'])]
其中Series的index必须与DataFrame中对应维度的index相同,这等价于用法d直接写
df.loc[[False, False, True]]
所以通常用输入方式d
f、callable函数(只有一个输入参数且必须是Series或DataFrame类型),返回一个合法的以上所说的类型
例子:
df.loc[lambda df : df [\'shield\'] ==8 ] #提取df中shield列==8的行
②iloc
与loc的区别在于,iloc只接受整数值(从0到length-1);此外iloc也接受boolean array
接受的输入值:
a、单个整数,如5;
b、整数的list或array,如[ 4 , 3 , 0 ]
c、整数切片,如1:7
d、boolean array
e、callable函数,接受一个参数(Series或DataFrame),返回值为上文a到d中的类型
2.5.3、返回DataFrame的array形式:values
返回值类型为numpy.ndarray
只返回DataFrame中的值,而不返回label行和列。
官方文档中推荐用DataFrame.to_numpy()代替
3、方法
用法为:df.xxx( ... )
方法 | 说明 |
abs | 返回绝对值化的DataFrame |
add | 加 |
add_prefix | 所有列label加前缀 |
add_suffix | 所有列label加后缀 |
agg | 用函数或函数list对DataFrame中的每一列元素进行聚合,聚合结果保存为新行,一个函数对应一行 |
aggregate | 同agg |
align | 连接两个对象 |
all | 返回是否所有元素都为True |
any | 返回是否存在元素为True |
append | 在末尾加一行或几行 |
apply | 对某个轴上的元素用某个函数,返回调用函数后的值组成的DataFrame |
applymap | 对所有元素用某个函数(相当于map之于list) |
asfreq | 将TimeSeries以固定的频率扩展为更大的TimeSeries |
asof | 返回指定行及之前最后一个没有NaN值的行 |
assign | 添加一个新列 |
astype | 将DataFrame中的数据类型转化为指定类型 |
at_time | 选择时间列为一天中的指定时间的行 |
between_time | 选择时间列为指定时间之间的行 |
backfill | 等价于DataFrame.fillna()中将参数method指定为\'bfill\' |
bfill | 同backfill |
bool | 将单个boolean元素转化为bool数据并返回 |
boxplot | 以各列为原始数据绘制箱型图 |
clip | 将所有数据整理为指定区间内的值,不在该区间内自动划分为区间两端的值 |
combine | 将两个DataFrame按照给定函数的方式进行合并 |
combine_first | 将一个DataFrame中的NaN值填充为另一个DataFrame中对应位置的值 |
compare | 对两个DataFrame进行比较,并罗列出二者的不同之处 |
convert_dtypes | 将每一列的类型设置为其中元素最可能的类型 |
copy | 得到一个当前DataFrame的副本 |
corr | 得到一个DataFrame中各列的相关性矩阵 |
corrwith | 得到两个DataFrame中各列间的相关性矩阵 |
count | 计算每行/列中的非NaN元素数 |
cov | 计算各列间的协方差矩阵 |
cummax | 以累积递增的方式获取每行及之前的最大值 |
cummin | 以累积递减的方式获取每行及之前的最小值 |
cumprod | 以累积的方式获取每行及之前所有值的乘积 |
cumsum | 以累积的方式获取每行及之前所有值的和 |
describe | 产生一个描述性的统计数据 |
diff | 获取每一行与上一行之差并填充到该行 |
div | 除以某个值 |
rdiv | 被哪个值除 |
divide | 同div |
dot | 计算两个矩阵的点积/数量级 |
drop | 删除特定的行/列 |
drop_duplicates | 删除重复行(或某一列上的重复值),返回删除后的新DataFrame |
droplevel | 删除多索引中的某一索引行/列 |
dropna | 删除包含空值的行/列 |
duplicated | 返回一个boolean Series,每行标识该行是否与之前出现的行重复 |
eq | df.eq(100) 等价于 df==100 |
equals | 比较两个DataFrame是否完全相同,返回True或False |
eval | 对DataFrame中的列执行某个以string方式给出的表达式 |
ewm | 指数加权滑动 |
ewma | 指数加权滑动平均 |
expanding |
指定窗口进行滑动运算 窗口:一次考虑多少行的数据 |
explode | 将List类型的数据扩展成DataFrame的一行 |
ffill | 等同于DataFrame.fillna()的参数method=\'ffill\'的情况 |
fillna | 用特定的方法填充DataFrame中的空值 |
filter | 对索引行/列的名称进行过滤(可以用正则、部分字符等)得到筛选后的行/列 |
first | 返回时间序列中最开始的若干天所在的行,(此处的最开始是日期上连续的几天,而不是前几行) |
first_valid_index | 返回第一个没有空值的行索引 |
floordiv | 除以一个数并向下取整 |
from_dict | 从一个dict创建DataFrame |
from_records | 从一个ndarray创建DataFrame |
ge | 大于等于特定值 |
groupby | 用一个映射器或Series对DataFrame进行聚簇 |
gt | 大于特定值 |
head | 前若干列 |
hist | 各列的直方图 |
idxmax | 各列中最大值的行索引(或相反) |
idxmin | 各列中最小值的行索引(或相反) |
infer_objeccts | 尝试推测一个object类型列的最优类型 |
info | 该DataFrame的详细信息总结 |
insert | 将一列插入到DataFrame的特定位置 |
interpolate | 用特定的插值方法填充空值 |
isin | 检测元素值是否包含在给定的值中 |
isna | 检查空值 |
isnull | 同上 |
items | 以迭代的方式访问每列 |
iteritems | 同上 |
iterrows | 以迭代的方式访问每行 |
itertuples | 同上,区别在于每行会视为一个namedtuple |
join | 连接两个DataFrame |
keys | 返回info axis |
kurt | 返回指定维度上的无偏峰度 |
kurtosis | 同上 |
last | 返回时间序列中最后的若干天所在的行,(此处的最开始是日期上连续的几天,而不是后几行) |
last_valid_index | 返回最后一个没有空值的行的索引 |
le | 小于等于某个值 |
lt | 小于某个值 |
mad | 平均绝对离差 |
max | 最大值 |
mean | 平均值 |
median | 中值 |
melt | 行列转换,用法同pandas(二)中的melt |
mask | 填充某些位置进行判断为True为特定的值 |
merge | 用两个不同的列对两个DataFrame进行连接 |
min | 最小值 |
mod | 除以一个数,计算余数 |
mul | 乘以一个数 |
multiply | 同上 |
ne | 不等于某个值 |
nlargest | 对指定列降序输出前n行 |
notna | 检测非空值 |
notnull | 检测非空值 |
nsmallest | 对指定列升序输出前n行 |
nunique | 计算不同列上的不重复的值数量 |
pad | 等同于DataFrame.fillna()的参数method=\'ffill\'的情况 |
pct_change | 检测该行与上一行值相比变化的百分比 |
pipe | 对DataFrame应用某个函数 |
pivot | 用给定的索引重组织DataFrame |
plot | 绘图 |
pop | 删除并返回指定列 |
pow | 幂指数 |
prod | 乘积 |
product | 乘积 |
quantile | 百分比分位符,结果中计算每个分位符处的值(以列为单位计算) |
query | 给出一个string形式的boolean表达式, query函数将查询所有符合该表达式的行 |
rank | 计算每行的数字等级 |
reindex | 重建标签列(保留已有的值,空值填充新值) |
reindex_like | 用另一个DataFrame标签列的所有项去查找某个DataFrame中的这些项 |
rename | 更改标签列的所有标签的名字 |
rename_axis | 为每个轴设置名字 |
reorder_levels | 给index重排序 |
replace | 把其中的某些值替换为其他值或其他某些值 |
resample | 对一系列时间数据行进行重采样 |
reset_index | 重设置标签列,旧的标签列被替换为0、1、2…… |
rolling | 滑动窗口计算 |
round | 所有项四舍五入 |
rpow | 把所有项都作为指数,参数项作为底数进行幂运算 |
sample | 随机采样取一些行 |
select_dtypes | 选择数据项类型为某个类型的列 |
sem | 计算某些轴上的SEM(无偏标准误差) |
set_axis | 重新设置某个轴上的标签值 |
set_flags | 设置flags,该项决定了是否允许重复的标签存在 |
set_index | 用已存在的列重新设置标签 |
shift | 部分行/列下移(右移),用一些值填充原来的值 |
skew | 无偏系数 |
sort_index | 根据标签列进行重排序 |
sort_values | 根据某列的值进行重排序 |
squeeze | 把只有单个数据的Series压缩为一个数值,把只有一列的DataFrame压缩为一列 |
stack | 把DataFrame的列标签变成一个行标签的多个部分,每个部分单独赋值 |
std | 样本标准差 |
sum | 指定轴求和 |
swapaxes | 交换两个轴 |
tail | 后几行的数据 |
take | 提取指定行、列 |
to_csv | 把该DataFrame写入CSV文件 |
to_excel | |
to_numpy | 把该DataFrame转化为一个Ndarray |
to_period |
把DataFrame从DatetimeIndex转化为PeriodIndex |
to_records | 把该DataFrame转化为Numpy record array |
to_timestamp | 把时间类型的标签转化为时间戳类型 |
transform | 所有项都调用某个函数 |
transpose | 转置,包括行列标签 |
truncate | 截取部分行或列之间的数据 |
unstack | 反转stack的变化,把属性变为实际的列 |
update | 用另一个DataFrame的数据更新该DataFrame的数据 |
value_counts | 统计重复行的个数 |
var | 房差 |
where | 用某些值替代不符合判断表达式的值 |
3.5、把这些函数、属性按类别划分
属性及潜在的信息 | |
index | 行标签(首列) |
columns | 列标签(首行) |
dtypes | 类型 |
info() | 详细信息总结 |
select_dtypes() | 筛选数据类型为某些类型的列 |
values | DataFrame的Ndarray形式(建议用函数to_numpy) |
axes | 各个轴的标签 |
ndim | 维度 |
size | 元素个数 |
shape | 各维度的长度 |
empty | 该DataFrame是否为空 |
set_flags() | 设置flag |
转化 | |
astype() | 将该DataFrame类型转化为另一种类型 |
convert_dtypes() | 将该DataFrame各列的类型转化为它最有可能的类型 |
infer_objects() | 尝试为object类型列探寻最适合的类型 |
copy() | 副本 |
bool() | 返回单个元素的bool类型值 |
索引、迭代 | |
head() | 前几行的数据 |
tail() | 后几行的数据 |
at | 用行列索引的方式访问单个值 |
iat | 用整数索引的方式访问单个值 |
loc | 用行列索引的方式访问一组值 |
iloc | 用整数索引的方式访问一组值 |
insert() | 在特定的位置插入一列 |
__iter__() | 在信息轴(info axis)上迭代 |
items() | 迭代每列,每次两个迭代项label和content |
iteritems() | 同上 |
keys() | 得到信息轴(info axis) |
iterrows() | 迭代每行 |
itertuples() | 迭代每行,迭代都将每行的内容都作为一个namedtuple |
pop() | 删除并返回DataFrame的最后一行 |
get() | 获得指定key对应列 |
isin() | DataFrame中的数据是否包含在给定的一块数据中(结果为boolean DataFrame) |
where() | 将数据进行逻辑表达式判断为假的值设置为给定值(结果为boolean DataFrame) |
mask() | 将数据进行逻辑表达式判断为真的值设置为给定值(结果为boolean DataFrame) |
query() | 用给定的string类型的布尔表达式筛选符合的列 |
二元运算 (r前缀表示两个运算数字位置相反) (以下皆为函数) |
|
add、radd | 加 |
sub、rsub | 减 |
mul、rmul | 乘 |
div、rdiv | 浮点除 |
truediv、rtruediv | 浮点除 |
floordiv、rfloordiv | 整除 |
mod、rmod | 取余 |
pow、rpow | 幂运算 |
dot | 点积、数量积 |
le、lt(以下三行可以直接用对应的数学公式代替) | 小于等于、小于 |
ge、gt | 大于等于、大于 |
eq、ne | 等于、不等于 |
整体运用函数、聚簇(GroupBy)、窗口 | |
apply | 对一个轴的所有元素运算 |
applymap | 对所有元素进行函数运算 |
pipe | 对DataFrame应用函数 |
agg | 对指定的轴上的元素进行聚合(sum、max等)运算 |
aggregate | |
transform | 用函数对DataFrame的数据进行变形,返回变形后的DataFrame |
groupby | 用聚簇函数对某个轴上的所有数据进行聚簇 |
rolling | 滑动窗口运算(一次用若干个连续的数据进行运算) |
expanding | 膨胀窗口运算(不固定窗口,而是窗口在运算过程中扩展变大) |
ewm | 指数加权滑动 |
计算、描述、统计状态 | |
abs | 绝对值 |
all | 是否全部元素都为真(一行/列作为一个结果) |
any | 是否存在真值(一行/列作为一个结果) |
clip | 用一个阈值范围检查所有数据,把不在范围内数据代之以阈值边界的值 |
corr | 相关性矩阵 |
corrwith | 两个DataFrame的相关性矩阵(列与列相对应) |
count | 计算每一行/列上的非空值 |
cov | 协方差矩阵 |
cummax | 行(列)前所有数的累计最大值 |
cummin | 行(列)前所有数的累计最小值 |
cumprod | 累乘(从开始到当前值) |
cumsum | 累加 |
describe | 一些常用的统计数据 |
diff | 每行/列与上一行/列的差值 |
eval | 给一个string表达式,对符合条件的列进行运算 |
kurt | 无偏峰度 |
kurtosis | 无偏峰度 |
mad | 平均绝对离差 |
max | 最大值 |
mean | 平均值 |
median | 中值 |
min | 最小值 |
pct_change | 元素间的百分比变化 |
prod、product | 累乘(全部值) |
quantile | 百分比分位符 |
rank | 计算各个数字的级别(根据标签行/列) |
round | 四舍五入 |
sem | 无偏标准差 |
skew | 无偏系数 |
sum | 求和 |
std | 样本标准差 |
var | 方差 |
nunique | 不重复值的数量 |
value_counts | 统计各行出现的次数 |
标签相关、数据筛选 | |
add_prefix | 加前缀 |
add_suffix | 加后缀 |
align | 直接连接两个DataFrame |
at_time | 筛选时间标签中含有指定时间的行 |
between_time | 筛选时间标签中在特定时间之间的行 |
drop | 删去指定标签的行/列 |
drop_duplicates | 删去并返回重复的行 |
duplicated | 返回boolean Series,标识每行是否与前边的行重复 |
equals | 检测两个DataFrame是否元素相同 |
filter | 筛选名字符合条件(支持正则表达式)的行/列 |
first | 选取最开始的若干天 |
head | 前若干行数据 |
idxmax | 筛选每一列最大值所在的行标签 |
idxmin | 筛选每一列最小值所在的行标签 |
last | 选取最后边的若干天 |
reindex | 重新设置index,保留已有index的行,填补新index的行 |
reindex_like | 筛选另一个DataFrame中行标签与一个DataFrame中行标签相同的行(如果没有就新建这一行) |
rename | 重命名各个轴的标签 |
rename_axis | 重命名各个轴 |
reset_index | 重置标签列为0、1、……,原标签列变为新列 |
sample | 随机采样一些行 |
set_axis | 重新设置标签(功能类似rename) |
set_index | 将已有的列设置为标签列 |
tail | 后若干行数据 |
take | 提取指定行/列的数据 |
truncate | 截取标签在某个区间内的数据 |
缺省值处理 | |
backfill、bfill | 等价于fillna的参数method=\'bfill\'的情况 |
ffill、pad | 等价于fillna的参数method=\'ffill\'的情况 |
dropna | 删除缺省值所在的行/列 |
fillna | 用一定方法填充缺省值 |
interpolate | 用插值方法填充缺省值 |
isna、isnull | 检查每个数据是否缺省 |
notna、notnull | 检查每个数据是否正常(与上一个相反) |
replace | 把一些数据替换为另一些数据 |
变形、排序、转置 | |
droplevel | 移除指定的标签列/行 |
pivot | 用指定的行/列作为标签重建DataFrame |
reorder_levels | 重排列标签等级 |
sort_values | 根据某列的值进行排序 |
sort_index | 根据标签列排序 |
nlargest | 根据某一列的值降序返回前n行 |
nsmallest | 根据某一列的值升序返回前n行 |
stack | 用某列作为新的标签列 |
unstack | 将多标签列转化为一个普通的列 |
melt | 将DataFrame转化为属性:值的两列 |
explode | 将list类型的数据拆开,每个元素都构成额外的一行 |
squeeze | 降维,单个数据变普通变量,一列数据变Series |
DataFrame.T | 转置 |
DataFrame.transpose | 转置 |
结合、比较、连接、合并 | |
append | 加上额外的一行 |
assign | 加上额外的一列 |
compare | 比较两个DataFrame并展示二者的不同之处 |
join | 拥有同名列的两个DataFrame连接 |
merge | 具有不同名但是类型相同两个列的DataFrame连接 |
update | 用另一个DataFrame中的数据填充该DataFrame中的数据 |
时间类型相关 | |
asfreq | 将时间序列转化为具有固定频率的序列(少变多) |
asof | 返回指定行之前第一个没有空值的行 |
shift | 前若干行/列下移(右移),以某值填充原值 |
first_valid_index | 第一个非空值行的标签 |
last_valid_index | 最后一个非空值行的标签 |
resample | 重采样时间序列,将多个时间行压缩到一个bin中 |
to_period | 将DatetimeIndex转化为PeriodIndex |
to_timestamp | 将DatetimeIndex转化为时间戳 |
Flags | |
Flags | 各种DataFrame隐藏属性设置 |
作图(前边没有plot.的都是DataFrame的方法) | |
plot | 用标签列作横轴,每一列的值在一个图上画折线图 |
plot.area | 上文折线图下的区域内填充各自的颜色 |
plot.bar | 柱状图 |
plot.barh | 水平柱状图 |
plot.box | 箱型图 |
plot.density、plot.kde | 核密度估计图 |
plot.hexbin | hexagonal bin图 |
plot.hist | 直方图 |
plot.line | 折线图,同plot |
plot.pie | 饼状图 |
plot.scatter | 散点图 |
boxplot | 箱型图 |
hist | 直方图 |
3.6、部分函数具体使用
1)set_index
说明
为某个DataFrame设置Index,返回修改后的DataFrame
用法
假设有一个DataFrame df,我们想把它的\'Time\'列设置为Index
df_new = df.set_index(\'Time\',inplace=False)
需要注意的是,如果参数inplace=False,那么并不是对df本身进行修改,而是返回一个修改后的DataFrame,所以需要用一个额外的变量承接 (如上文df_new)
2)applymap
说明
对DataFrame中的所有元素使用某个函数,相当于对list使用map
用法
把df中的所有0值设为Null
df.applymap(lambda x:Null if x==0 else x)
3)apply
说明
对DataFrame中每行/列的所有元素使用某个函数
用法
df.apply( func, axis=0, raw=False, result_type=None, args=(), **kwds )
参数
参数 | 类型 | 默认值 | 说明 |
func | 函数名 | 应用于每一行/每一列的函数值 | |
axis |
0与\'index\' 或 1与\'columns\' |
0 |
0:为每一列应用该函数 1:为每一行应用该函数 |
raw | bool | False |
决定传入的行与列是Series还是ndarray对象: False:Series True:ndarray |
result_type | {\'expand\',\'reduce\',\'broadcast\',None} | None |
只用于axis=1时 \'expand\'结果会被加入到DataFrame的扩展列中 \'reduce\'单独返回结果列 \'broadcast\'结果保存为原DataFrame中,相当于用结果列替换原DataFrame中的列 |
args | tuple | () | 传入func的参数 |
4)assign
说明
添加一列
用法
df.assign( 列名1 = Series、Array、List ,
列名2 = Series、Array、List)
参数中的列名n不需要加引号;Series、Array、List要和df长度一致。
例子
假设已经有一个DataFrame df,有个长度与它相等的Series S,我们要把S添加到df中,命名为\'New_Column\'
df_new = df.assign( NewColumn=S )
如果是对已有列进行运算得到的新列,可以用lambda匿名函数和df[列名]的结合,例如:
df.assign(temp_f=lambda x: x[\'temp_c\'] * 9 / 5 + 32, temp_k=lambda x: (x[\'temp_f\'] + 459.67) * 5 / 9)
5)between_time
说明
提取Index位于指定时间段内的行构成新的DataFrame。
注意,Index必须是DateTime类型
用法
df.between_time( start_time, end_time, include_start=True, include_end=True, axis=None )
参数
参数 |
类型 |
默认值 |
说明 |
start_time | datetime.time或str | 开始时间 | |
end_time | datetime.time或str | 结束时间 | |
include_start | bool | True | 是否包含两端 |
include_end | bool | True | |
axis | {0或\'index\',1或\'columns\'} | 0 | 纵向比较还是横向比较 |
start_time < end_time时,筛选在此区间内的行;
start_time > end_time时,筛选不在此区间内的行。
返回值
Series、DataFrame
例子
ts A 2018-04-09 00:00:00 1 2018-04-10 00:20:00 2 2018-04-11 00:40:00 3 2018-04-12 01:00:00 4
#筛选在此区间内的行 ts.between_time(\'0:15\', \'0:45\') A 2018-04-10 00:20:00 2 2018-04-11 00:40:00 3
#筛选不在此区间内的行 ts.between_time(\'0:45\', \'0:15\') A 2018-04-09 00:00:00 1 2018-04-12 01:00:00 4
6)interpolate
说明
用插值的方法填充NaN值。
请注意,对于多重索引(MultiIndex)的DataFrame/Series,只支持用method=\'linear\'的形式。
用法
df.interpolate( method=\'linear\', axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=None, **kwargs )
参数
参数 |
类型 |
默认值 |
说明 |
method |
\'barycentric\'、\'polynomial\':最近邻、零值、...;
‘akima’, ‘cubicspline’:用SciPy中相应的插值方法;
|
\'linear\' | 插值方法 |
axis | {0或\'index\'、1或\'columns\'、None} | 0 | 沿着哪个方向插值 |
limit | int | 最多填充的连续空值数 | |
inplace | bool | False | 是否替换原值 |
limit_direction | {\'forward\'、\'backward\'、\'both\'} |
对于连续的空值,依照该参数说明的方向进行填充。
|
|
limit_area | {\'None\'、\'inside\'、\'outside\'} |
如果指定了参数\'limit\',那么在填充连续的NaN时会有如下限制: None:无限制; \'inside\':只填充被合法值包裹的NaNs; \'outside\':只填充未被合法值包裹的NaNs |
|
downcast | \'infer\'或None | 空值填充后的类型为向下转型 |
返回值
Series、DataFrame、None
如果inplace=True,那么返回None,原来的DataFrame中的空值被新值填充;如果inplace=False,那么返回一个填充后的Series、DataFrame
例子
1、什么参数都不写,用默认方式插值(即线性插值法——linear)
s = pd.Series([0, 1, np.nan, 3]) s 0 0.0 1 1.0 2 NaN 3 3.0 dtype: float64 s.interpolate() 0 0.0 1 1.0 2 2.0 3 3.0 dtype: float64
2、padding插值,一次最多填充两个连续的空值
s = pd.Series([np.nan, "single_one", np.nan, "fill_two_more", np.nan, np.nan, np.nan, 4.71, np.nan])
s 0 NaN 1 single_one 2 NaN 3 fill_two_more 4 NaN 5 NaN 6 NaN 7 4.71 8 NaN dtype: object
s.interpolate(method=\'pad\', limit=2) 0 NaN 1 single_one 2 single_one 3 fill_two_more 4 fill_two_more 5 fill_two_more 6 NaN 7 4.71 8 4.71 dtype: object
3、用\'forward\'方式插值——空值用它前边的值替换:
df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0), (np.nan, 2.0, np.nan, np.nan), (2.0, 3.0, np.nan, 9.0), (np.nan, 4.0, -4.0, 16.0)], columns=list(\'abcd\')) df a b c d 0 0.0 NaN -1.0 1.0 1 NaN 2.0 NaN NaN 2 2.0 3.0 NaN 9.0 3 NaN 4.0 -4.0 16.0 df.interpolate(method=\'linear\', limit_direction=\'forward\', axis=0) a b c d 0 0.0 NaN -1.0 1.0 1 1.0 2.0 -2.0 5.0 2 2.0 3.0 -3.0 9.0 3 2.0 4.0 -4.0 16.0
4、多项式插值——order指明多项式的次数
df[\'d\'].interpolate(method=\'polynomial\', order=2) 0 1.0 1 4.0 2 9.0 3 16.0 Name: d, dtype: float64
7)drop
说明
从DataFrame中删除指定的行、列。
用法
df.drop( labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=\'raise\' )
参数
参数 |
类型 |
默认值 |
说明 |
labels | 单个label或label list | 要删除的行/列的名 | |
axis | {0或\'index\',1或\'columns\'} | 0 | 参数labels指定的是行还是列 |
index | 单个label或label list | 删除index指定的行,指定了该参数就可以不指定前两个参数 | |
columns | 单个label或label list | 删除columns指定的列,指定了该参数就可以不指定前两个参数 | |
level | int或level name | 用于MultiIndex,说明Index的级别 | |
inplace | bool | False | 是否替换原DataFrame,如果False,那么会生成一个修改后的副本 |
errors | {\'ignore\',\'raise\'} | \'raise\' | 如果是\'ignore\',就忽略错误,只删除存在的行/列 |
返回值
DataFrame或None;取决于inplace是否为True
例子
先构造一个DataFrame;
df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=[\'A\', \'B\', \'C\', \'D\']) df A B C D 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11
删除列/columns;
df.drop([\'B\', \'C\'], axis=1) A D 0 0 3 1 4 7 2 8 11
df.drop(columns=[\'B\', \'C\']) A D 0 0 3 1 4 7 2 8 11
删除行/index
df.drop([0, 1])
A B C D
2 8 9 10 11