zoukankan      html  css  js  c++  java
  • Pandas 读取 Excel 文件去掉首尾的换行符

    Pandas 库可以读取 Excel 文件、csv 文件等,但是 Windows 系统默认的换行符为 \r\n,这导致读取的数据末尾可能带有 \r,这会给后续的操作带来不便。不过,Pandas 有自带的方法可以方便地去掉这些特殊字符,比如 \r,\n,\t,空格。

    我们手动构造一个含有上述换行符的 Series,使用 series.str.strip() 来清洗数据。

    环境准备:

    conda install pandas
    conda install xlrd
    conda install openpyxl
    

    测试用例:

    In [1]: import pandas as pd
    
    In [2]: import numpy as np
    
    In [3]: foo = pd.DataFrame({"name":["amy\n","bob\t","candy\r","dog\r\n","fish ",np.nan]})
    
    In [4]: foo
    Out[4]: 
          name
    0    amy\n
    1    bob\t
    2  candy\r
    3  dog\r\n
    4    fish 
    5      NaN
    
    In [5]: foo["name"].str.strip()
    Out[5]: 
    0      amy
    1      bob
    2    candy
    3      dog
    4     fish
    5      NaN
    Name: name, dtype: object
    

    结果显示是可以去除的。

    下面读取 Excel 文件,用同样的方法尝试是否可行。

    
    import pandas as pd
    
    foo = pd.read_excel(
        "/home/junsircoding/Documents/test.xlsx",
        header=0,
        names=["name"]
    )
    
    foo["name"] = foo["name"].str.strip()
    print(foo["name"])
    

    结果:

    0       amy\n
    1       bob\t
    2     candy\r
    3     dog\r\n
    4    fish    
    Name: name, dtype: object
    
    0      amy\n
    1      bob\t
    2    candy\r
    3    dog\r\n
    4       fish
    Name: name, dtype: object
    

    发现同样的方法无效。

    这里需要将特殊字符转以,或者在字符串前加r前缀。

    import pandas as pd
    
    foo = pd.read_excel(
        "/home/junsircoding/Documents/test.xlsx",
        header=0,
        names=["name"]
    )
    print(foo["name"])
    
    foo["name"] = foo["name"].str.strip(r"\n")
    foo["name"] = foo["name"].str.strip(r"\r")
    foo["name"] = foo["name"].str.strip(r"\t")
    foo["name"] = foo["name"].str.strip(r"\r\n")
    foo["name"] = foo["name"].str.strip()
    print(foo["name"])
    

    或:

    import pandas as pd
    
    foo = pd.read_excel(
        "/home/junsircoding/Documents/test.xlsx",
        header=0,
        names=["name"]
    )
    print(foo["name"])
    
    foo["name"] = foo["name"].str.strip("\\n")
    foo["name"] = foo["name"].str.strip("\\r")
    foo["name"] = foo["name"].str.strip("\\t")
    foo["name"] = foo["name"].str.strip("\\r\\n")
    foo["name"] = foo["name"].str.strip()
    print(foo["name"])
    

    结果是符合预期的:

    0       amy\n
    1       bob\t
    2     candy\r
    3     dog\r\n
    4    fish    
    Name: name, dtype: object
    
    0      amy
    1      bob
    2    candy
    3      dog
    4     fish
    Name: name, dtype: object
    
  • 相关阅读:
    Win32汇编
    Boost ASIO 实现异步IO远控
    Python 使用oslo.vmware管理ESXI虚拟机
    Python 巡检接入钉钉机器人
    Django Ajax序列化与反序列化
    Nacos 认证绕过
    Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC
    Apache Solr 全版本任意读取文件漏洞
    垂直水平居中的多种方法 主要的4种
    vue provide/inject 父组件如何给孙子组件传值
  • 原文地址:https://www.cnblogs.com/junsircoding/p/15667181.html
Copyright © 2011-2022 走看看