python将文本块转换为数据帧混合类型

python将文本块转换为数据帧混合类型,python,pandas,frame,data-conversion,Python,Pandas,Frame,Data Conversion,我是一个巨蟒和熊猫新手。我有一个文本块,它的数据按列排列。前六列中的数据为整数,其余为浮点。我尝试创建两个数据帧,然后将它们连接起来: 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] # Co

我是一个巨蟒和熊猫新手。我有一个文本块,它的数据按列排列。前六列中的数据为整数,其余为浮点。我尝试创建两个数据帧,然后将它们连接起来:

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 +=
这会导致断言错误:值的长度与索引的长度不匹配

这里有两行数据

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
提前感谢您的帮助。

您可以将熊猫与宠物一起使用

对于您的样本,将是:

>>> 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

我编辑了这个问题以显示两行数据。我试过这样做:import StringIO pd.read_tableStringIOtxt[26:]但是得到了TypeError:“module”对象不是callable@user2825739仔细阅读我的答案,您应该从StringIO导入StringIO,而不是导入StringIO。这有点让人困惑,但是StringIO模块内部有StringIO类。我这样做了:从StringIO导入StringIO df=pd.read_csvStringIOtxt[26:],sep=r'\s+',header=None print df,它给了我以下信息:Int64Index:1个条目,0到0列:4320个条目,0到4399个数据类型:float642304,int641440, object576@user2825739我对你的txt一无所知,所以没办法。您可以检查自己的解决方案是否适用于您提供的有问题的数据,因此代码是一个示例,您可以根据自己的需要进行详细说明。回答一般问题是值得的,适用于许多情况和问题,但不值得为特定情况编写和调试代码,这样的回答只会引起提问者的兴趣。@user2825739关于列的问题,您不能拆分行txt,因此它是行分隔符的问题