python pandas文本块到数据框混合类型

时间:2013-11-17 08:01:08

标签: python pandas frame data-conversion

我是一个蟒蛇和熊猫新手。我有一个文本块,其数据按列排列。前六列中的数据是整数,其余的是浮点数。我尝试创建两个可以连接的DataFrame:

sect1 = DataFrame(dtype=int)
sect2 = DataFrame(dtype=float)
i = 0
# The first 26 lines are header text
for line in txt[26:]:
    colmns = line.split()
    sect1[i] = colmns[:6]  # Columns with integers
    sect2[i] = colmns[6:]  # Columns with floating point
    i +=

这会导致AssertionError:值的长度与索引的长度

不匹配

以下是两行数据

2013 11 15  0000   56611      0   1.36e+01  3.52e-01  7.89e-02  4.33e-02  3.42e-02  1.76e-02  2.89e+04  5.72e+02 -1.00e+05
2013 11 15  0005   56611    300   1.08e+01  5.50e-01  2.35e-01  4.27e-02  3.35e-02  1.70e-02  3.00e+04  5.50e+02 -1.00e+05

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以将Pandas csv parserStringIO一起使用。 An example in pandas documentation.

您的样本将是:

>>> import pandas as pd
>>> from StringIO import StringIO
>>> data = """2013 11 15  0000   56611      0   1.36e+01  3.52e-01  7.89e-02  4.33e-02  3.42e-02  1.76e-02  2.89e+04  5.72e+02 -1.00e+05
... 2013 11 15  0005   56611    300   1.08e+01  5.50e-01  2.35e-01  4.27e-02  3.35e-02  1.70e-02  3.00e+04  5.50e+02 -1.00e+05"""

加载数据

>>> df = pd.read_csv(StringIO(data), sep=r'\s+', header=None)

将前三行转换为datetime(可选)

>>> df[0] = df.iloc[:,:3].apply(lambda x:'{}.{}.{}'.format(*x), axis=1).apply(pd.to_datetime)
>>> del df[1]
>>> del df[2]
>>> df
                   0   3      4    5     6      7       8       9       10  \
0 2013-11-15 00:00:00   0  56611    0  13.6  0.352  0.0789  0.0433  0.0342
1 2013-11-15 00:00:00   5  56611  300  10.8  0.550  0.2350  0.0427  0.0335

       11     12   13      14
0  0.0176  28900  572 -100000
1  0.0170  30000  550 -100000