【问题标题】:import text to pandas with multiple delimiters将文本导入带有多个分隔符的 pandas
【发布时间】:2014-12-20 12:18:04
【问题描述】:

我有一些看起来像这样的数据:

c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.3

我想将它导入一个 3 列数据框,例如列

a , b, c
1,  1, 0.5
etc

我一直在尝试将数据读取为在“:”上拆分的 2 列,然后在“”上拆分第一列。但是我觉得它很烦人。 有没有更好的方法直接在导入时对其进行排序?

目前:

data1 = pd.read_csv(file_loc, skiprows = 3, delimiter = ':', names = ['AB', 'C'])
data2 = pd.DataFrame(data1.AB.str.split(' ',1).tolist(), names = ['A','B'])

但是,由于我的数据有前导空格,这使情况变得更加复杂......

我觉得这应该是一项简单的任务,但目前我正在考虑逐行阅读并在导入前使用一些 find replace 来清理数据。

【问题讨论】:

    标签: python import pandas csv


    【解决方案1】:

    一种方法可能是使用 python 引擎允许的正则表达式分隔符。例如:

    >>> !cat castle.dat
    c stuff
    c more header
    c begin data         
     1 1:.5
     1 2:6.5
     1 3:5.3
    >>> df = pd.read_csv('castle.dat', skiprows=3, names=['a', 'b', 'c'], 
                         sep=' |:', engine='python')
    >>> df
       a  b    c
    0  1  1  0.5
    1  1  2  6.5
    2  1  3  5.3
    

    【讨论】:

    • 这看起来完全符合我的需要。谢谢
    • 我现在没有注意到文档中的 'sep' 参数感到有点尴尬... :-/
    • 为什么我在使用这种方法时会收到ParserErrorpandas.errors.ParserError: Expected 29 fields in line 11, saw 45. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.
    • 或者在单字符分隔符的情况下,一个字符类sep='[ :]'
    • @user77005 sep 值是一个正则表达式字符串;确保您始终将相同的内容放在 '..'"...."
    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 2021-05-15
    • 1970-01-01
    • 2020-10-03
    • 2017-01-22
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多