官方文檔: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