【问题标题】:Pandas read mis-spaced columns熊猫读取错误间隔的列
【发布时间】:2014-04-04 19:18:42
【问题描述】:

在下面的数据框中,大多数列的分隔符是空格。但是,在第一列中,缺少空格,导致所有列向右移动一个。有没有办法读取数据框,这样我就不必不断地选择左侧的一列来获取我需要的列。

 RUN   YR    A     B       C        D        E       F 
    11988    8.98  173.90  210.81   19.54    0.69    0.00
    11989    7.00  317.30  280.06    1.82    2.10    0.00
    11990    8.82  237.00  275.55    0.77    1.20    0.00
    11991    8.39  408.90  402.21    0.00    2.50    0.00
    11992    8.48  291.20  285.01    0.00    1.67    0.00
    11993    5.90  437.40  419.76    2.86    3.39    0.00
    11994    7.65  405.30  346.13    5.69    2.96    0.00
    11995    7.06  352.80  383.85    0.07    2.17   16.05
    11996    5.14  377.10  339.10   13.55    2.27    0.00
    11997    6.80  350.20  383.68    7.32    2.82    0.00
    11998    8.21  462.80  358.38    2.85    3.40    0.00
    11999    8.70  322.30  387.90    2.89    2.67   24.64
    12000    8.33  297.40  233.06    0.00    1.75    0.00

【问题讨论】:

  • 您说的是0,1,2 专栏吗?那只是索引。这是您已经导入的数据框,而不是文件,对吗?您能否更具体地说明缺少空格和“第一列”的含义?
  • 谢谢beroe,0,1,2列确实是索引。 RUN 下的列具有类似 11988 的值,实际上应该是 1 1988(其中 1988 是年份)。
  • 您能否准确显示文件中的内容? (而不是错误的熊猫输出)
  • 编辑现在显示原始数据....
  • 因此,RUN 列的所有值都为 1,年份列的值应为 1988、1989....2000

标签: python pandas


【解决方案1】:

如果您在上面显示的是您的文件,您可以使用read_fwf(读取固定宽度格式行的表格)来读取:

In [116]: s=""" RUN   YR    A     B       C        D        E       F 
     ...:     11988    8.98  173.90  210.81   19.54    0.69    0.00
     ...:     11989    7.00  317.30  280.06    1.82    2.10    0.00
     ...:     11990    8.82  237.00  275.55    0.77    1.20    0.00
     ...:     11991    8.39  408.90  402.21    0.00    2.50    0.00
     ...:     11992    8.48  291.20  285.01    0.00    1.67    0.00
     ...:     11993    5.90  437.40  419.76    2.86    3.39    0.00
     ...:     11994    7.65  405.30  346.13    5.69    2.96    0.00
     ...:     11995    7.06  352.80  383.85    0.07    2.17   16.05
     ...:     11996    5.14  377.10  339.10   13.55    2.27    0.00
     ...:     11997    6.80  350.20  383.68    7.32    2.82    0.00
     ...:     11998    8.21  462.80  358.38    2.85    3.40    0.00
     ...:     11999    8.70  322.30  387.90    2.89    2.67   24.64
     ...:     12000    8.33  297.40  233.06    0.00    1.75    0.00"""

In [117]: pd.read_fwf(StringIO(s))
Out[117]: 
    RUN   YR     A      B       C      D     E      F
0      11988  8.98  173.9  210.81  19.54  0.69   0.00
1      11989  7.00  317.3  280.06   1.82  2.10   0.00
2      11990  8.82  237.0  275.55   0.77  1.20   0.00
3      11991  8.39  408.9  402.21   0.00  2.50   0.00
4      11992  8.48  291.2  285.01   0.00  1.67   0.00
5      11993  5.90  437.4  419.76   2.86  3.39   0.00
6      11994  7.65  405.3  346.13   5.69  2.96   0.00
7      11995  7.06  352.8  383.85   0.07  2.17  16.05
8      11996  5.14  377.1  339.10  13.55  2.27   0.00
9      11997  6.80  350.2  383.68   7.32  2.82   0.00
10     11998  8.21  462.8  358.38   2.85  3.40   0.00
11     11999  8.70  322.3  387.90   2.89  2.67  24.64
12     12000  8.33  297.4  233.06   0.00  1.75   0.00

由于格式错误,名称为'RUN YR' 的第一列将不正确,但其他列是正确的。

【讨论】:

  • 谢谢 joris,抱歉我可能不是很清楚,但值为 0、1、2... 的列是 pandas 添加的索引,实际上并没有在文件中。
猜你喜欢
  • 1970-01-01
  • 2017-10-21
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多