PY-pandas | 数据转换之变形金刚

#%%
# CY3761 | 2022-01-06 16:32
#%%
# 套用模版后记住先执行-全部运行
#%%
# 导入项
import numpy as np
import pandas as pd
#%%
def printData(o):
    oItems = dict(dtype=None,dtypes=None,shape=None,size=None,index=None,columns=None)

    for (k,v) in oItems.items():
        try:
            oItems[k] = eval(f'o.{k}')
        except (Exception, BaseException) as e:
            pass

    print(type(o), '\n', oItems)
#%% md
# 数据转换之变形金刚
#%% md
## 数据转换
#%% md
### 轴和元素替换
#%%
rMin = 65
rChr = [chr(_) for _ in range(rMin, rMin+26)]
np.array(rChr)
#%%
a01 = pd.DataFrame(
    np.random.randint(0, 10, (10, 3)),
    rChr[:10],
    tuple('PTK')
)
a01
#%%
# 定义一堆空数据
a01.iloc[4,2] = None  # 先行后列 数值内容 None NaN 都是 NaN
a01
#%%
# 重命名索引
a01.rename(index=dict(A='AA', B='BB'), columns=dict(P='人工智能'))  # inplace默认False= 返回新数据
#%%
# 替换值
a01.replace(3, -3)  # 元素值如果是3 改为 -3
#%%
# 多个替换
a01.replace([0,4], 16)  # 但凡是 0 或 4 替换成16
#%%
# 根据字典键值进行替换
a01.replace({0: 512, np.NaN: 9999})
#%%
# 指定范围替换
a01.replace({'P':2}, 666)  # P列的值是2, 替换为666
#%% md
### map
#%%
a01
#%%
# map
a01.K.map({1:'H',5:'W',7:'A'})  # 值为 1改为H 5改为W 7改为A 其余 NaN
#%%
# 如果需要其他不变
a01.K.replace({1:'H',5:'W',7:'A'})
#%%

def convert(x):
    items = {1:'H',5:'W',7:'A',np.NaN:'Z'}  # NaN 无法转换

    print(x, type(x))

    if x in items:
        return items.get(x)
    elif x is np.NaN or str(x) == 'nan':  # 不行 后面的才可以
        return items.get(np.NaN)  # 这样硬写死处理
    return x

a01.K.map(convert)  # 使用函数传入进行过滤 map实现 不在范围就不改变
#%%
np.NaN == np.NaN, np.NaN is np.NaN  # 奇怪 值不相同, 内存地址却相同
#%%
# 使用隐式函数 匿名函数
a01.P.map(lambda x:True if x > 5 else False)
#%% md
### apply 既支持 Series,也支持 DataFrame
#%%
a02 = pd.DataFrame(np.random.randint(0, 101, (30, 3)), columns=tuple('PME'))
a02
#%%
a02.P # 获取 P 学科这一列数据 (有大有小)
#%%
# 给予分数进行评级
def convert(x):
    items = {80:'优秀', 60:'及格'}
    for _ in items:
        if x >= _:
            return items.get(_)
    else:
        return '不及格'
    pass

b02 = a02.P.apply(convert)  # 自己定义
b02
#%%
# 把数据插入到原来数据中
#%%
# 求所有的成绩等级
for _ in a02.columns:
    b02 = a02[_].apply(convert)  # 进行计算各科成绩等级
    a02.insert(list(a02.columns).index(_) + 1, _ + '科成绩等级', b02)  # 插入位置 插入标题 插入数据 | 由于每个循环都会增加字段 index获取每个循环都需要更新

a02
#%%

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CY3761

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值