首页 > 解决方案 > 熊猫 read_fwf

问题描述

我没有得到一张清晰的桌子。请帮忙。我的数据是:

    0 2017   IX 2018       X 2018       X 2018       X 2018        0 2017   IX 2018   X 2018    X 2018   X 2018
                                                                                             0 2017       IX 2018                                    0 2017   IX 2018

    UKUPNO                                               1.053    1.075         1.093        103,8        101,7         1.633    1.669     1.701      104,2    101,9
A   Poljoprivreda, šumarstvo i ribolov                     907      888           925        102,0        104,2         1.394    1.356     1.420      101,9    104,7
B   Vađenje ruda i kamena                                  913      919           839         91,9         91,3         1.395    1.406     1.297       93,0     92,2
C   Prerađivačka industrija                                769      764           775        100,8        101,4         1.176    1.169     1.187      100,9    101,5
D   Proizvodnja i snabdijevanje                          1.574    1.570         1.647        104,6        104,9         2.459    2.455     2.579      104,9    105,1
    električnom energijom, plinom,
    parom i klimatizacija

我使用这段代码:

df = pd.read_fwf(io.StringIO(t), header=None, skiprows=1)

我得到了需要清理的输出......例如,我将 D 列分隔为三列:

D   Proizvodnja i snabdijevanje     1.574   1.570 1.647     104,6   104,9   2.459   2.455 2.579     104,9   105,1
13  NaN     električnom energijom, plinom,  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
14  NaN     parom i klimatizacija   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN

标签: pythonpandas

解决方案


问题仅在于 D-“行”,其文本分为 3 行?如果是这样,您可以这样做:

s = """
    0 2017   IX 2018       X 2018       X 2018       X 2018        0 2017   IX 2018   X 2018    X 2018   X 2018
                                                                                             0 2017       IX 2018                                    0 2017   IX 2018

    UKUPNO                                               1.053    1.075         1.093        103,8        101,7         1.633    1.669     1.701      104,2    101,9
A   Poljoprivreda, šumarstvo i ribolov                     907      888           925        102,0        104,2         1.394    1.356     1.420      101,9    104,7
B   Vađenje ruda i kamena                                  913      919           839         91,9         91,3         1.395    1.406     1.297       93,0     92,2
C   Prerađivačka industrija                                769      764           775        100,8        101,4         1.176    1.169     1.187      100,9    101,5
D   Proizvodnja i snabdijevanje                          1.574    1.570         1.647        104,6        104,9         2.459    2.455     2.579      104,9    105,1
    električnom energijom, plinom,
    parom i klimatizacija
"""

df = pd.read_fwf(pd.compat.StringIO(s), header=None, skiprows=5)

df[0] = df[0].ffill()
df[1] = df[0].map(df[1].groupby(df[0]).agg(lambda x: ' '.join(x)))
df = df.dropna(axis=0)
df

输出:

    0   1   2   3   4   5   6   7   8   9   10  11
0   A   Poljoprivreda, šumarstvo i ribolov  907.000 888.00  925.000 102,0   104,2   1.394   1.356   1.420   101,9   104,7
1   B   Vađenje ruda i kamena   913.000 919.00  839.000 91,9    91,3    1.395   1.406   1.297   93,0    92,2
2   C   Prerađivačka industrija 769.000 764.00  775.000 100,8   101,4   1.176   1.169   1.187   100,9   101,5
3   D   Proizvodnja i snabdijevanje električnom energi...   1.574   1.57    1.647   104,6   104,9   2.459   2.455   2.579   104,9   105,1

推荐阅读