zoukankan      html  css  js  c++  java
  • 【Pandas】群类答疑4:搞定一列拆分多列1(学会找规律)

    群里小伙伴问如何一列拆分多列,比如度分秒,提取里面的数字,拆分三列

    先原群主分享的两种方法:split和extract

     下面详细介绍两种方法原理:

    1、split

     split实际支持多次拆分,通过|把拆分条件连接起来,类似正则的或,默认生成list,expand=True可以自动展开为二维数据

    像下面这种

     你发现没,最后一列是空数据

    如何只要前面三列?

    1、写死:取前三列,假如有多列,这样写不灵活(多列不推荐)

    2.1、间接取最后一列:利用按行索引提取,结合转置来实现,于是可以先转置,轻松去除最后一行,再转置回去(灵活,多列推荐

    下面是第二种过程

    2.2、直接取最后一列:直接按行、列联合索引提取的函数,df.iloc[:,:-1],不用转置(感谢群友提供思路)

    df.iloc[:,:-1],以分号为界限,左边是行,右边是列;这里的意思是选择全部行,除最后一列的全部列数据(进一步简化,强烈推荐)

     是不是很轻松就解决了

    2、extract 正则表达式: 默认列名是0开始的索引,通过 ?P<列名> 重命名列名

     可能这里例子比较特殊,expand并不影响最终结果。

    最后,再对两种方法做个小结:

    split:拆分会产生空列,需要去除,好在容易理解

    extract:通过正则提取,不会产生空列,但对正则要求比较高

    下面是直接把拆分结果赋值给列,间接实现一列拆分多列效果

    print('-------总结----------')
    df = pd.DataFrame({'序号':range(1,6),
                       '度分秒':['27°14’24”','33°44’42”','50°35’50”','45°45’00”','72°02’32”']})
    df1=df.copy()
    df1[['','','']]=df2['度分秒'].str.split('°|’|”',expand=True).T[:-1].T
    print('split + 间接提取')
    display(df1)
    df2=df.copy()
    df2[['','','']]=df2['度分秒'].str.split('°|’|”',expand=True).iloc[:,:-1]
    print('split + 直接提取')
    display(df2)
    df3=df.copy()
    df3[['','','']]=df1['度分秒'].str.extract(r'(?P<度>d+)°(?P<分>d+)’(?P<秒>d+)”',expand=True)
    print('extract 正则提取')
    display(df3)

    这样拆解是不是清晰很多了,你学会了吗?

    ------------------------------- ********厚德达理,励志勤工******** -------------------------------
  • 相关阅读:
    arcgis api for flex 开发入门
    Error #2148
    为Flex Builder设置测试服务器
    地图服务报 error #2035
    springMVC整理03--处理数据模型 & 试图解析器 & @ResponseBody & HttpEntity
    FastDFS安装与使用
    springMVC整理02--常用注解的使用
    springMVC整理01--搭建普通的工程
    Spring模块介绍
    spring05-Spring事务管理
  • 原文地址:https://www.cnblogs.com/hightech/p/13909160.html
Copyright © 2011-2022 走看看