【问题标题】:Import data with pandas read_csv: header with two rows error使用 pandas read_csv 导入数据:带有两行错误的标题
【发布时间】:2020-08-06 08:31:51
【问题描述】:

我正在尝试使用 pandas 从文本文件中导入数据。数据如下所示:

  Step            Time    Pressure z=0  MoleFrac 1 z=0  MoleFrac 2 z=0   Mole flow z=0
 [Int]       [seconds]         [bar.a]             [-]             [-]       [gmole/s]
     1       0.0000000  7.75425808E-01  1.30000000E-01  8.70000000E-01  6.00000000E-02
     2       0.0556727  7.67785502E-01  1.30000000E-01  8.70000000E-01  6.00000000E-02
     3       0.5673533  7.18327020E-01  1.30000000E-01  8.70000000E-01  6.00000000E-02

我试着这样做:

import pandas as pd
data = pd.read_csv('filename.txt', delimiter="\s+", header=[0,1])

如果我只使用一行作为标题,它会起作用,但是一旦我添加第二行,我就会收到一条错误消息:

IndexError: list index out of range

有什么想法吗?

【问题讨论】:

  • 问题似乎出在分隔符上。用, 替换列之间的空格并将分隔符设置为相同的字符。

标签: python pandas import


【解决方案1】:

试试:

df = pd.read_csv(r"filename.txt",  delimiter="\s{2,}", header=[0,1], engine='python')

engine 设置为python 时,可以使用正则表达式作为分隔符。

结果:

   Step      Time Pressure z=0 MoleFrac 1 z=0 MoleFrac 2 z=0 Mole flow z=0
  [Int] [seconds]      [bar.a]            [-]            [-]     [gmole/s]
0     1  0.000000     0.775426           0.13           0.87          0.06
1     2  0.055673     0.767786           0.13           0.87          0.06
2     3  0.567353     0.718327           0.13           0.87          0.06

由于列名中有单个空格,我发现分隔符至少应为 2 个空格" ",表示为\s{2,}

查看df.columns:

MultiIndex([(          'Step',     '[Int]'),
            (          'Time', '[seconds]'),
            (  'Pressure z=0',   '[bar.a]'),
            ('MoleFrac 1 z=0',       '[-]'),
            ('MoleFrac 2 z=0',       '[-]'),
            ( 'Mole flow z=0', '[gmole/s]')],
           )

所以生成的数据框看起来是正确的。

【讨论】:

  • 很高兴听到这个消息!请考虑接受解决方案作为答案。
猜你喜欢
  • 1970-01-01
  • 2013-10-27
  • 2016-12-12
  • 2016-10-04
  • 2015-02-16
  • 2020-04-28
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多