39_Pandas.Serise用map方法替换列元素

39_Pandas.Serise用map方法替换列元素

pandas.Series的map,通过将函数作为参数传递给pandas.Series的每个元素的函数。

可以将字典类型dict指定为map()的参数。

替换元素的方法具有replace(),但是如果要使用不同的值替换pandas.Series或pandas.DataFrame列(= pandas.Series)中的所有元素,则map()会更好。

这里,

  • 元素替换中map()和replace()之间的区别
    • 速度比较
  • 使用map()的示例:将定性数据转换为定量数据

将予以描述。 以下面的数据为例。

import pandas as pd

df = pd.read_csv('./data/39/sample_pandas_normal.csv')

print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

s = df['state']
print(s)
# 0    NY
# 1    CA
# 2    CA
# 3    TX
# 4    CA
# 5    NY
# Name: state, dtype: object

元素替换中map()和replace()之间的区别

如果在map()的参数中指定了字典dict({key:value}),则将元素匹配键替换为value。

s_map_all = s.map({'NY': 'NewYork', 'CA': 'California', 'TX': 'Texas'})
print(s_map_all)
# 0       NewYork
# 1    California
# 2    California
# 3         Texas
# 4    California
# 5       NewYork
# Name: state, dtype: object

可以将字典指定为replace()的参数。如果pandas.Series的所有元素都被替换,则结果类似于replace()。

s_replace_all = s.replace({'NY': 'NewYork', 'CA': 'California', 'TX': 'Texas'})
print(s_replace_all)
# 0       NewYork
# 1    California
# 2    California
# 3         Texas
# 4    California
# 5       NewYork
# Name: state, dtype: object

如果字典键未涵盖pandas.Series中所有元素的值,则结果将不同。 在map()中,未被替换的值变为NaN。使用replace()时,原始值保持不变。

s_map = s.map({'NY': 'NewYork'})
print(s_map)
# 0    NewYork
# 1        NaN
# 2        NaN
# 3        NaN
# 4        NaN
# 5    NewYork
# Name: state, dtype: object

s_replace = s.replace({'NY': 'NewYork'})
print(s_replace)
# 0    NewYork
# 1         CA
# 2         CA
# 3         TX
# 4         CA
# 5    NewYork
# Name: state, dtype: object

结合使用map()和update(),可以将未替换的元素保留为其原始值。但是,使用update()会修改原始对象,这与在replace()中将参数replace设置为True的行为相同。

s_copy = s.copy()
s_copy.update(s_copy.map({'NY': 'NewYork'}))
print(s_copy)
# 0    NewYork
# 1         CA
# 2         CA
# 3         TX
# 4         CA
# 5    NewYork
# Name: state, dtype: object

s_copy = s.copy()
s_copy.replace({'NY': 'NewYork'}, inplace=True)
print(s_copy)
# 0    NewYork
# 1         CA
# 2         CA
# 3         TX
# 4         CA
# 5    NewYork
# Name: state, dtype: object

速度比较

使用Jupyter Notebook的%timeit进行了简单的速度比较。 如果所有元素都被替换,则Map()比replace()更快。

%timeit s.map({'NY': 'NewYork', 'CA': 'California', 'TX': 'Texas'})
# 345 µs ± 14 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit s.replace({'NY': 'NewYork', 'CA': 'California', 'TX': 'Texas'})
# 519 µs ± 15.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

与update()结合使用时,replace()比map()更快。

s_copy = s.copy()
%timeit s_copy.update(s_copy.map({'NY': 'NewYork'}))
# 643 µs ± 21.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

s_copy = s.copy()
%timeit s_copy.replace({'NY': 'NewYork'}, inplace=True)
# 230 µs ± 10 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

还有报告说,即使使用update(),map()也会更快,其结果取决于原始pandas.Series的大小和指定替换的字典的大小。

特别是,replace()的变化取决于指定替换的字典的大小。

s_copy = s.copy()
%timeit s_copy.update(s_copy.map({'NY': 'NewYork', 'CA': 'California', 'TX': 'Texas'}))
# 627 µs ± 10.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

s_copy = s.copy()
%timeit s_copy.replace({'NY': 'NewYork', 'CA': 'California', 'TX': 'Texas'}, inplace=True)
# 441 µs ± 22.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

如果只替换一次小数据没有太大的区别,但是如果对海量数据重复相同的替换过程,则速度会很有效,因此在实际替换的情况下进行映射可能要尝试()和replace()在决定使用哪一个之前。 如果要用不同的值替换所有元素,则Map()通常会更快。

使用map()的示例:将定性数据转换为定量数据

使用map()的常见示例是将一串定性数据(类别数据)转换为许多定量数据时。 当将其用作机器学习数据时,将示例中的字符串(例如地名和性别划分(男性,女性))替换为0和1的数值。

s_map_num = s.map({'NY': 0, 'CA': 1, 'TX': 2})
print(s_map_num)
# 0    0
# 1    1
# 2    1
# 3    2
# 4    1
# 5    0
# Name: state, dtype: int64

由于map()没有参数位置来更新原始对象,因此当用map()替换pandas.DataFrame的列时,请将其分配给原始列。

df['state'] = df['state'].map({'NY': 0, 'CA': 1, 'TX': 2})
print(df)
#       name  age  state  point
# 0    Alice   24      0     64
# 1      Bob   42      1     92
# 2  Charlie   18      1     70
# 3     Dave   68      2     70
# 4    Ellen   24      1     88
# 5    Frank   30      0     57

print(df['state'].dtype)
# int64

有一个名为pandas.get_dummies()的函数,用于将定性数据(类别变量)转换为虚拟变量。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pandas.DataFrame(output_10.detach().numpy()) 输出的类型是 pandas 数据帧。 pandas 是一个用于数据分析的开源库。数据帧是 pandas 中用于存储表格数据的数据结构。它由一个二维结构组成,其中有行和。每一行代表一个观察值,每一列代表一个变量。 output_10.detach().numpy() 的输出类型是 numpy 数组。numpy 是一个用于进行科学计算的 Python 库,它提供了许多用于操作数组的函数和方法。数组是 numpy 中的主要数据结构,它由一个类似于 Python 表的多维数据集合组成。 因此,pandas.DataFrame(output_10.detach().numpy()) 输出的是一个从 numpy 数组转换而来的 pandas 数据帧。 ### 回答2: pandas.DataFrame(output_10.detach().numpy())输出的类型是DataFrame。 ### 回答3: `pandas.DataFrame(output_10.detach().numpy())`的输出类型是`pandas`数据帧(DataFrame)。 `output_10.detach().numpy()`将PyTorch张量(tensor)`output_10`转换为NumPy数组,并使用`detach()`函数来返回其拷贝,断开与计算图的连接。然后,`pandas.DataFrame()`将这个NumPy数组作为输入,创建一个`pandas`数据帧。 数据帧是pandas库中的一种数据结构,类似于表格或数据库中的表。它由行和组成,每一列可以有不同的数据类型。使用`pandas.DataFrame()`函数可以将各种类型的数据转换为数据帧,提供了方便的数据操作和分析功能。所以,`pandas.DataFrame(output_10.detach().numpy())`返回的类型就是`pandas`数据帧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值