Pandas 循环以从一行创建数据帧

Pandas 循环以从一行创建数据帧,pandas,python-2.7,dataframe,hdf5,Pandas,Python 2.7,Dataframe,Hdf5,我有以下代码: # 2.1. Selected datasets for i in range(len(self.selected_datasets)): self.outputfile.write('\n') self.outputfile.write('Dataset : ' + self.selected_datasets[i]) #Print the pass ex : index1/index2/index3/...

我有以下代码:

#       2.1. Selected datasets 


    for i in range(len(self.selected_datasets)):
        self.outputfile.write('\n')
        self.outputfile.write('Dataset : ' + self.selected_datasets[i]) #Print the pass ex : index1/index2/index3/...    
        oDataset = self.ohdf5.getDataset(self.selected_datasets[i]) # oDataset  correspond to curselection dataset

#       2.2. Datatypes in dataset 


        self.datatype_listbox.select_set(0, 'end')
        self.datatype_listbox.event_generate("<<ListboxSelect>>")  
        datas = self.datatype_listbox.curselection()


        self.outputfile.write('\n')      
        for col in datas: # For datatype in selected dataset

                    c = Column(oDataset.h5data,oDataset.columns[col]) # oDataset.columns[col] dtype name ex : DATATYPE1
                    self.c_list.append(c)

                    for r in range(len(c.col)):                
                        self.b_list.append(c.col[r]) 
#                        self.outputfile.write('\n')
                    self.outputfile.write(oDataset.columns[col] + ' : ')  #  Write Dtype name

                    for i in range(len(self.b_list)):
#                            self.outputfile.write('\n')
                        self.outputfile.write(str(self.b_list[i])) # Write Dtype 2,3,4
我正在寻找一种蟒蛇式的方法来获得:

    Dataset : /INDEX/NASTRAN/RESULT/ELEMENTAL/ELEMENT_FORCE/BEAM
DATATYPE1   DATATYPE2   DATATYPE3
  2           2             .
  3           3             .
  4           4             .
              .             .
              .             .

我知道这很容易,但我是一个Python初学者,我没有成功地将我读过的不同主题合并在一起。如果答案是指一份文件,那就足够了。

我假设您是从文件中读取的。我用它作为我代码的字符串

import pandas as pd
import numpy as np

file = '''Dataset : /INDEX/NASTRAN/RESULT/ELEMENTAL/ELEMENT_FORCE/BEAM
DATATYPE1 : 234DATATYPE2 : 2340781415628DATATYPE3 : 2340781415628781478147814'''

file = file.split('\n')[1:]
file = ' '.join(file)
datatypes = file.split('DATATYPE')
datatypes = [x for x in datatypes if x != '']

temp_dict = {}
for elem in datatypes:
    elem = elem.split(' : ')
    temp_dict['DATATYPE' + str(elem[0])] = []
    for i in elem[1]:
        temp_dict.setdefault('DATATYPE' + str(elem[0]), []).append(i)

df = pd.DataFrame.from_dict(temp_dict, orient='index').fillna(np.nan).transpose()
输出:

   DATATYPE1 DATATYPE2 DATATYPE3
0          2         2         2
1          3         3         3
2          4         4         4
3        NaN         0         0
4        NaN         7         7
5        NaN         8         8
6        NaN         1         1
7        NaN         4         4
8        NaN         1         1
9        NaN         5         5
10       NaN         6         6
11       NaN         2         2
12       NaN         8         8
13       NaN       NaN         7
14       NaN       NaN         8
15       NaN       NaN         1
16       NaN       NaN         4
17       NaN       NaN         7
18       NaN       NaN         8
19       NaN       NaN         1
20       NaN       NaN         4
21       NaN       NaN         7
22       NaN       NaN         8
23       NaN       NaN         1
24       NaN       NaN         4

如果模板相同,您可以这样更改它
file=file.split('\n')[1://code>获取除第一行以外的所有行,然后再次将其转换为字符串,以便脚本
file=''.join(file)
。我试过了,效果很好。我更新了代码。
   DATATYPE1 DATATYPE2 DATATYPE3
0          2         2         2
1          3         3         3
2          4         4         4
3        NaN         0         0
4        NaN         7         7
5        NaN         8         8
6        NaN         1         1
7        NaN         4         4
8        NaN         1         1
9        NaN         5         5
10       NaN         6         6
11       NaN         2         2
12       NaN         8         8
13       NaN       NaN         7
14       NaN       NaN         8
15       NaN       NaN         1
16       NaN       NaN         4
17       NaN       NaN         7
18       NaN       NaN         8
19       NaN       NaN         1
20       NaN       NaN         4
21       NaN       NaN         7
22       NaN       NaN         8
23       NaN       NaN         1
24       NaN       NaN         4