前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas系列3_缺失值处理和apply用法

pandas系列3_缺失值处理和apply用法

作者头像
皮大大
发布2021-03-02 15:02:01
1.3K0
发布2021-03-02 15:02:01
举报
文章被收录于专栏:机器学习/数据可视化

知识点

  • 空值删除和填充
  • apply、applymap用法
  • shift()用法
  • value_counts()和mean():统计每个元素的出现次数和行(列)的平均值

缺失值和空值处理

概念

空值:空值就是没有任何值,""

缺失值:df中缺失值为nan或者naT(缺失时间),在S型数据中为none或者nan

相关函数
  • df.dropna()删除缺失值
  • df.fillna()填充缺失值
  • df.isnull()
  • df.isna()

官方文档

df.dropna()

函数作用:删除含有空值的行或列,删除缺失值

代码语言:javascript
复制
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
  • axis:维度,0表示index行,1表示columns列,默认为0
  • how:
    • all:全部为缺失值则删除该行或者列
    • any:至少有一个则删除
  • thresh:指定至少出现了thresh个才删除
  • subset:指定在某些列的子集中选择出现了缺失值的列删除,不在子集中不会删除(axis决定行\列)
  • inplace:刷选过缺失值得到的新数据是存为副本还是直接在原数据上进行修改。
代码语言:javascript
复制
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

0

Alfred

NaN

NaT

1

Batman

Batmobile

1940-04-25

2

Catwoman

Bullwhip

NaT

代码语言:javascript
复制
# 默认参数:删除行,只要有空值就会删除,不替换
df.dropna()

name

toy

born

1

Batman

Batmobile

1940-04-25

代码语言:javascript
复制
df.dropna(how='any')

name

toy

born

1

Batman

Batmobile

1940-04-25

代码语言:javascript
复制
df.dropna(how='all')  # 全部是空值才会删除

name

toy

born

0

Alfred

NaN

NaT

1

Batman

Batmobile

1940-04-25

2

Catwoman

Bullwhip

NaT

代码语言:javascript
复制
df.dropna(thresh=2)  # 至少出现两个空值删除

name

toy

born

1

Batman

Batmobile

1940-04-25

2

Catwoman

Bullwhip

NaT

代码语言:javascript
复制
df.dropna(subset=['name', 'born'])

name

toy

born

1

Batman

Batmobile

1940-04-25

df.fillna()

主要作用:填充缺失值

代码语言:javascript
复制
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
代码语言:javascript
复制
dates
代码语言:javascript
复制
DatetimeIndex(['2019-09-24', '2019-09-25', '2019-09-26', '2019-09-27',
               '2019-09-28', '2019-09-29'],
              dtype='datetime64[ns]', freq='D')
代码语言:javascript
复制
# 在数据df的基础上增加一列E
data = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
代码语言:javascript
复制
# 将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

统计值

代码语言:javascript
复制
data.mean()  
# data.mean(0)  默认是每个列上的均值
代码语言:javascript
复制
A    0.081423
B   -0.486257
C    1.203052
D    0.468599
E    1.000000
dtype: float64
代码语言:javascript
复制
data.mean(1)   # 求行轴上的均值
代码语言:javascript
复制
2019-09-24    0.141075
2019-09-25    0.424772
2019-09-26    0.640926
2019-09-27    0.418582
Freq: D, dtype: float64
代码语言:javascript
复制
pd.Series([1, 3, 5, np.nan, 6, 8], index=dates)
代码语言:javascript
复制
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
代码语言:javascript
复制
# shift函数将结果移动两个单位,广播机制
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2)  
s
代码语言:javascript
复制
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
代码语言:javascript
复制
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用法(重点)
代码语言:javascript
复制
# 求出每列的max 和 min
def f(x):
    return pd.Series([x.min(), x.max()], index=["min", "max"])
df.apply(f)
代码语言:javascript
复制
f = lambda x: x.max() - x.min()
df.apply(f)
# df.apply(f, axis="columns") 表示在行上执行
代码语言:javascript
复制
A    3.478075
B    1.387917
C    2.985920
D    2.643529
dtype: float64

关于applymap函数:得到df数据中浮点值的格式化字符串

代码语言:javascript
复制
formatFunc = lambda x: "%.2f" % x
df.applymap(formatFunc)  # 输出的数据为2位小数
统计每个value出现的次数
代码语言:javascript
复制
s = pd.Series(np.random.randint(0,7, size=10))
s
代码语言:javascript
复制
0    3
1    5
2    2
3    4
4    6
5    5
6    4
7    4
8    1
9    3
dtype: int32
代码语言:javascript
复制
s.value_counts()
代码语言:javascript
复制
4    3
5    2
3    2
6    1
2    1
1    1
dtype: int64
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-8,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识点
  • 缺失值和空值处理
  • 概念
    • 相关函数
      • df.dropna()
        • df.fillna()
        • 统计值
          • apply用法(重点)
            • 统计每个value出现的次数
            相关产品与服务
            NAT 网关
            NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档