知識點
- 空值删除和填充
-
用法apply、applymap
-
用法shift()
- value_counts()和mean():統計每個元素的出現次數和行(列)的平均值
缺失值和空值處理
概念
空值:空值就是沒有任何值,
""
缺失值:
df
中缺失值為
nan
或者
naT
(缺失時間),在S型資料中為
none
或者
nan
相關函數
-
删除缺失值df.dropna()
-
填充缺失值df.fillna()
-
df.isnull()
-
df.isna()
官方文檔
df.dropna()
df.dropna()
函數作用:删除含有空值的行或列,删除缺失值
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
複制
-
:次元, 表示axis
行,index
表示1
列,預設為0columns
-
how:
-
全部為缺失值則删除該行或者列all:
-
至少有一個則删除any:
-
-
:指定至少出現了thresh個才删除thresh
-
:指定在某些列的子集中選擇出現了缺失值的列删除,不在子集中不會删除(axis決定行\列)subset
-
:刷選過缺失值得到的新資料是存為副本還是直接在原資料上進行修改。inplace
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan, 'Batmobile', 'Bullwhip'],
"born": [pd.NaT, pd.Timestamp("1940-04-25"),pd.NaT]})
df
複制
name | toy | born | |
---|---|---|---|
Alfred | NaN | NaT | |
1 | Batman | Batmobile | 1940-04-25 |
2 | Catwoman | Bullwhip | NaT |
# 預設參數:删除行,隻要有空值就會删除,不替換
df.dropna()
複制
name | toy | born | |
---|---|---|---|
1 | Batman | Batmobile | 1940-04-25 |
df.dropna(how='any')
複制
name | toy | born | |
---|---|---|---|
1 | Batman | Batmobile | 1940-04-25 |
df.dropna(how='all') # 全部是空值才會删除
複制
name | toy | born | |
---|---|---|---|
Alfred | NaN | NaT | |
1 | Batman | Batmobile | 1940-04-25 |
2 | Catwoman | Bullwhip | NaT |
df.dropna(thresh=2) # 至少出現兩個空值删除
複制
name | toy | born | |
---|---|---|---|
1 | Batman | Batmobile | 1940-04-25 |
2 | Catwoman | Bullwhip | NaT |
df.dropna(subset=['name', 'born'])
複制
name | toy | born | |
---|---|---|---|
1 | Batman | Batmobile | 1940-04-25 |
df.fillna()
df.fillna()
主要作用:填充缺失值
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
複制
dates
複制
DatetimeIndex(['2019-09-24', '2019-09-25', '2019-09-26', '2019-09-27',
'2019-09-28', '2019-09-29'],
dtype='datetime64[ns]', freq='D')
複制
# 在資料df的基礎上增加一列E
data = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
複制
# 将E列的前2行設為1
data.loc[dates[0]:dates[1], 'E'] = 1
data
複制
A | B | C | D | E | |
---|---|---|---|---|---|
2019-09-24 | -1.636419 | 0.222190 | 0.504764 | 0.614839 | 1.0 |
2019-09-25 | -0.516706 | -0.084145 | 1.191989 | 0.532722 | 1.0 |
2019-09-26 | 1.841656 | -0.917348 | 0.064767 | 1.574627 | NaN |
2019-09-27 | 0.637159 | -1.165726 | 3.050687 | -0.847791 | NaN |
統計值
data.mean()
# data.mean(0) 預設是每個列上的均值
複制
A 0.081423
B -0.486257
C 1.203052
D 0.468599
E 1.000000
dtype: float64
複制
data.mean(1) # 求行軸上的均值
複制
2019-09-24 0.141075
2019-09-25 0.424772
2019-09-26 0.640926
2019-09-27 0.418582
Freq: D, dtype: float64
複制
pd.Series([1, 3, 5, np.nan, 6, 8], index=dates)
複制
2019-09-24 1.0
2019-09-25 3.0
2019-09-26 5.0
2019-09-27 NaN
2019-09-28 6.0
2019-09-29 8.0
Freq: D, dtype: float64
複制
# shift函數将結果移動兩個機關,廣播機制
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2)
s
複制
2019-09-24 NaN
2019-09-25 NaN
2019-09-26 1.0
2019-09-27 3.0
2019-09-28 5.0
2019-09-29 NaN
Freq: D, dtype: float64
複制
df.sub(s, axis='index')
複制
A | B | C | D | |
---|---|---|---|---|
2019-09-24 | NaN | NaN | NaN | NaN |
2019-09-25 | NaN | NaN | NaN | NaN |
2019-09-26 | 0.841656 | -1.917348 | -0.935233 | 0.574627 |
2019-09-27 | -2.362841 | -4.165726 | 0.050687 | -3.847791 |
2019-09-28 | -4.284321 | -5.942288 | -2.905034 | -4.137728 |
2019-09-29 | NaN | NaN | NaN | NaN |
apply用法(重點)
# 求出每列的max 和 min
def f(x):
return pd.Series([x.min(), x.max()], index=["min", "max"])
df.apply(f)
複制
f = lambda x: x.max() - x.min()
df.apply(f)
# df.apply(f, axis="columns") 表示在行上執行
複制
A 3.478075
B 1.387917
C 2.985920
D 2.643529
dtype: float64
複制
關于applymap函數:得到df資料中浮點值的格式化字元串
formatFunc = lambda x: "%.2f" % x
df.applymap(formatFunc) # 輸出的資料為2位小數
複制
統計每個value出現的次數
s = pd.Series(np.random.randint(0,7, size=10))
s
複制
0 3
1 5
2 2
3 4
4 6
5 5
6 4
7 4
8 1
9 3
dtype: int32
複制
s.value_counts()
複制
4 3
5 2
3 2
6 1
2 1
1 1
dtype: int64
複制
本文參與 騰訊雲自媒體分享計劃 ,歡迎熱愛寫作的你一起參與!
本文分享自作者個人站點/部落格
http://www.renpeter.cn
複制
如有侵權,請聯系 [email protected] 删除。