Python:pandas(三)——DataFrame
官方文档:pandas之DataFrame
1、构造函数
用法
pandas.DataFrame(
data=None,
index=None,
columns=None,
dtype=None,
)
参数
参数 | 类型 | 说明 |
data | ndarray、iterable、dict、DataFrame | 用于构造DataFrame的数据(注意,用某个DataFrame构造另一个DataFrame,可能会导致同步修改的问题;如果要得到某个DataFrame的副本,可以用df.copy()) |
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中的类型
补充:
如果想用loc提取某一列的最后一号元素,那么loc[i,j]中的i不能写为-1,可以这样写:
lastEle = df.loc[df.index[-1],column_name]
2.5.3、返回DataFrame的array形式:values
返回值类型为numpy.ndarray
只返回DataFrame中的值,而不返回label行和列。
官方文档中推荐用DataFrame.to_numpy()代替
2.5.4、检查DataFrame是否为空:empty
df.empty:如果df.empty中没有任何元素,就会返回True
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_new = 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)
append
说明
添加一行
用法
df_new = df.append(other, ignore_index=False, verify_integrity=False, sort=False)
参数
参数 |
类型 |
默认值 |
说明 |
other |
DataFrame、Series、Dict 或 以上所说类型的List |
追加到最后几行的数据 | |
ignore_index | bool | False | 如果为True,那么新df的index将被重新设置为0,1,...,n-1 |
verify_integrity | bool | 如果为True,那么当other与原df的index有重复时会报ValueError | |
sort | bool | 对新df按照索引进行重新排序 |
例子
df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'), index=['x', 'y'])
df
A B
x 1 2
y 3 4 df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['x', 'y']) df2
A B
x 5 6
y 7 8
df.append(df2, ignore_index=True)
A B
0 1 2
1 3 4
2 5 6
3 7 8
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
8)head、tail
head(n):前n行
tail(n):后n行
不写n默认为5
Python:pandas(三)——DataFrame的更多相关文章
- python. pandas(series,dataframe,index) method test
python. pandas(series,dataframe,index,reindex,csv file read and write) method test import pandas as ...
- python pandas.Series&&DataFrame&& set_index&reset_index
参考CookBook :http://pandas.pydata.org/pandas-docs/stable/cookbook.html Pandas set_index&reset_ind ...
- python基础:如何使用python pandas将DataFrame转换为dict
之前在知乎上看到有网友提问,如何将DataFrame转换为dict,专门研究了一下,pandas在0.21.0版本中是提供了这个方法的.下面一起学习一下,通过调用help方法,该方法只需传入一个参数, ...
- python pandas ---Series,DataFrame 创建方法,操作运算操作(赋值,sort,get,del,pop,insert,+,-,*,/)
pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的, 导入如下: from panda ...
- python 数据处理学习pandas之DataFrame
请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...
- oracle数据据 Python+Pandas 获取Oracle数据库并加入DataFrame
import pandas as pd import sys import imp imp.reload(sys) from sqlalchemy import create_engine impor ...
- 【跟着stackoverflow学Pandas】 - Adding new column to existing DataFrame in Python pandas - Pandas 添加列
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档
array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片 ...
- Python pandas学习总结
本来打算学习pandas模块,并写一个博客记录一下自己的学习,但是不知道怎么了,最近好像有点急功近利,就想把别人的东西复制过来,当心沉下来,自己自觉地将原本写满的pandas学习笔记删除了,这次打算写 ...
- Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库
Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...
随机推荐
- java 坐标练习
定义一个三维空间的点,有三个坐标 实现以下目标: 1.可以生成特定坐标的点对象 2.提供可以设置三个坐标的方法 3.提供可以计算该点到特定点距离的平方的方法 class Point { double ...
- python使用pip安装库超时报错解决办法
原因:pip源超时了,安装不上 pip install matplotlib -i http://pypi.douban.com/simple --trusted-host pypi.douban.c ...
- 安卓开发常见Bug-setContentView(R.layout.....)报错
这是安卓开发的常见错误,当你在引用或者复制别人的Layout xml文件时需要在AndroidManifest.xml中添加东西 需要将图中的activity android:name添加进去,否则是 ...
- django之分页算法实现(Paginator)
导入模块:from django.core.paginator import Paginator 一.Paginator的基本用法: from django.core.paginator import ...
- AT2348 [ARC070D] HonestOrUnkind
不妨先从无解的情况下手,不难发现当 \(A \le B\) 时是一定无解的. 因为不诚实的 \(B\) 个人可以装作是诚实的,全部说自己这一方是诚实的对方是不诚实的我们就无法判断了. 下面我们就可以在 ...
- Web3对于我们普通人意味着什么?
▲ 点击101链视界,关注不走丢 大家好,我是阿创,这是我的第27篇原创文章. 上一篇文章中我们了解了互联网的前世今生:Web 1.0.2.0.3.0,我们对Web的前两个阶段都不陌生,特别是 Web ...
- 【JS】函数提升变量提升以及函数声明和函数表达式的区别
今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...
- laravel中closure和curry 科里化函数式编程
推荐值得的一看博客文档:谢谢作者 : https://my.oschina.net/zhmsong 函数式编程curry的概念: 只传递给函数一部分参数来调用函数,然后返回一个函数去处理剩下的参数. ...
- Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)
转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...
- Haproxy LVS Nginx的优缺点总结
Haproxy LVS Nginx的优缺点总结 1.haproxy优点 2.Nginx优点 3.Nginx缺点 4.LVS优点 5.LVS缺点 haproxy优点: haproxy也是支持虚拟主机 ...