pandas映射问题

70 篇文章 0 订阅

使用案例1

import pandas as pd
df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
                   'key2' : ['one', 'two', 'one', 'two', 'one'],
                   'data1' : np.arange(5),
                   'data2' : np.arange(5,10)})
print(df)
df['data1'] = df['data1'].map(lambda x : "%.3f"%x) #lambda在这里其实是在定义一个简单的函数,一个没有函数名的函数。
df# 将数字保持三位有效数字
  key1 key2  data1  data2
0    a  one      0      5
1    a  two      1      6
2    b  one      2      7
3    b  two      3      8
4    a  one      4      9
key1     object
key2     object
data1     int64
data2     int64
dtype: object
key1key2data1data2
0aone0.0005
1atwo1.0006
2bone2.0007
3btwo3.0008
4aone4.0009

使用案例2

df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
                   'key2' : ['one', 'two', 'one', 'two', 'one'],
                   'data1' : np.arange(5),
                   'data2' : np.arange(5,10)})
print(df)
df['key1'] = df['key1'].map({'a':'c',"b":"d"})
df
  key1 key2  data1  data2
0    a  one      0      5
1    a  two      1      6
2    b  one      2      7
3    b  two      3      8
4    a  one      4      9
key1key2data1data2
0cone05
1ctwo16
2done27
3dtwo38
4cone49

使用案例3

df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
                   'key2' : ['one', 'two', 'one', 'two', 'one'],
                   'data1' : np.arange(5),
                   'data2' : np.arange(5,10)})
print(df)
df['key1'] = df['key1'].map({'a':'b',"b":"a"})# 互相映射
df
  key1 key2  data1  data2
0    a  one      0      5
1    a  two      1      6
2    b  one      2      7
3    b  two      3      8
4    a  one      4      9
key1key2data1data2
0bone05
1btwo16
2aone27
3atwo38
4bone49

使用案例4

df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
                   'key2' : ['one', 'two', 'one', 'two', 'one'],
                   'data1' : np.arange(5),
                   'data2' : np.arange(5,10)})
print(df)
df['key1'] = df['key1'].map({'a':'aaaa'})# 互相映射
print(df)##
## 可以看到这里的问题是如果映射的值不是全部的key,那么不完整的key会被映射成Nan
  key1 key2  data1  data2
0    a  one      0      5
1    a  two      1      6
2    b  one      2      7
3    b  two      3      8
4    a  one      4      9
   key1 key2  data1  data2
0  aaaa  one      0      5
1  aaaa  two      1      6
2   NaN  one      2      7
3   NaN  two      3      8
4  aaaa  one      4      9

使用案例5

df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
                   'key2' : ['one', 'two', 'one', 'two', 'one'],
                   'data1' : np.arange(5),
                   'data2' : np.arange(5,10)})
print(df)
df['key1'] = df['key1'].map({'a':'aaaa'}).fillna(df['key1'])
print(df)##
## 加入fillna就可以做到粗存在映射的键值保持原来一样
  key1 key2  data1  data2
0    a  one      0      5
1    a  two      1      6
2    b  one      2      7
3    b  two      3      8
4    a  one      4      9
   key1 key2  data1  data2
0  aaaa  one      0      5
1  aaaa  two      1      6
2     b  one      2      7
3     b  two      3      8
4  aaaa  one      4      9

类别变量映射成整型变量

import pandas as pd 
df = pd.DataFrame({'x':['good', 'bad', 'good', 'great']}, dtype='category')

df["level"] = df["x"].cat.codes
print(df)

map1=dict( zip(df["x"].cat.codes,df['x'] ) )
print(map1)

df["xx"] =df["level"].map(map1) ## 重新映射回去,判断是否争取
print(df)

在这里插入图片描述
这里使用cat.codes进行映射,但是要想获得这个映射,那么就应该使用dict的zip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值