Python:pandas(三)——DataFrame


官方文檔: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
  • 'linear':線性插值(這是Multiindexs可用的唯一方法);
  • 'time':用於日期數據的插值;
  • 'index'、'values':使用索引值作為待填充值;
  • 'pad':使用存在的值填充空值;
  • 'nearest'、'zero'、'slinear'、'quadratic'、'cubic'、'spline'、

   'barycentric'、'polynomial':最近鄰、零值、...;

  • 'krogh'、‘piecewise_polynomial’, ‘spline’, ‘pchip’,

   ‘akima’, ‘cubicspline’:用SciPy中相應的插值方法;

  • 'from_derivatives':scipy.interpolate.BPoly.from_derivatives
'linear' 插值方法
axis {0或'index'、1或'columns'、None} 0 沿着哪個方向插值
limit int   最多填充的連續空值數
inplace bool False 是否替換原值
limit_direction {'forward'、'backward'、'both'}  

對於連續的空值,依照該參數說明的方向進行填充。

  • 如果指定參數'limit':如果插值方法是'pad'或'ffill',那么'limit_direction'必須是'forward';如果插值方法是'backfill'或'bfill',那么'limit_direction'必須是'backwards';
  • 如果未指定參數'limit':如果插值方法是'backfill'或'bfill',那么'limit_direction'默認是'backward';其他情況都是'forward'
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM