无法从2D列表

时间:2017-10-06 16:05:04

标签: python arrays numpy

python 3.5.2
numpy 1.11.1

我在从分割文本文件创建的dataframe创建2-dimensional list时遇到问题。这是文本文件的示例:

   #freq [MHz]   #flags    #total   %flagged\n947.6 1451736.0 1451736.0
1.0\n947.615625 1451736.0 1451736.0 1.0\n947.63125  1451736.0 1451736.0
1.0\n947.646875 1451736.0 1451736.0 1.0\n947.6625   1451736.0 1451736.0 
1.0\n947.678125 1451736.0 1451736.0 1.0\n947.69375  1451736.0 1451736.0 
1.0\n947.709375 1451736.0 1451736.0 1.0\n947.725    1451736.0 1451736.0 
1.0\n947.740625 1451736.0 1451736.0 1.0\n947.75625  1451736.0 1451736.0 
1.0\n947.771875 1451736.0 1451736.0 1.0\n947.7875   1451736.0 1451736.0 
1.0\n947.803125 1451736.0 1451736.0 1.0\n947.8 ....

因此,这些行以\n分隔,每列由space分隔。我解析了这个:

obs_array = []
obs_1 = obs_txts[obs].split('\n')
for i in range(0,len(obs_1)):
    obs_array.append(obs_1[i].split(' '))

所以我得到obs_array作为二维列表。我摆脱了first row(只是列名,我在工作dataframe后重命名)和last row,这只是一个空的'' 。所以,我现在有一个包含30720 rows4 columns的二维列表。我可以把它变成一个数组:

obs_array = np.array(obs_array)

但此数组的形状返回(30720,)。我检查了每一行的长度,每一行返回4并试图强制形状为(30720,4)返回size error。我肯定知道应该有30720行。将其放入dataframe

obs_df = pd.DataFrame(obsarray)

返回

0

0   [947.6, 1451736.0, 1451736.0, 1.0]

1   [947.615625, 1451736.0, 1451736.0, 1.0]

2   [947.63125, 1451736.0, 1451736.0, 1.0]

3   [947.646875, 1451736.0, 1451736.0, 1.0]

4   [947.6625, 1451736.0, 1451736.0, 1.0]

换句话说,30720x1 dimensioned dataframe每行有一个条目:该行的列表。

这里发生了什么?为什么我不能用python来解释形状为(30720,4)的obs_array?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

因此,在obs_array = np.array(obs_array)之后,您可以运行pd.DataFrame(obs_array.tolist()),它将为您提供以下数据框:

        0       1            2         3     4      5
  0     #       freq        [MHz]    #flags #total  %flagged
  1 947.6       1451736.0   1451736.0   1.0 None    None
  2 947.615625  1451736.0   1451736.0   1.0 None    None
  3 947.63125   1451736.0   1451736.0   1.0 None    None
  4 947.646875  1451736.0   1451736.0   1.0 None    None
  5 947.6625    1451736.0   1451736.0   1.0 None    None
  6 947.678125  1451736.0   1451736.0   1.0 None    None
  7 947.69375   1451736.0   1451736.0   1.0 None    None
  8 947.709375  1451736.0   1451736.0   1.0 None    None
  9 947.725     1451736.0   1451736.0   1.0 None    None
 10 947.740625  1451736.0   1451736.0   1.0 None    None
 11 947.75625   1451736.0   1451736.0   1.0 None    None
 12 947.771875  1451736.0   1451736.0   1.0 None    None
 13 947.7875    1451736.0   1451736.0   1.0 None    None
 14 947.803125  1451736.0   1451736.0   1.0 None    None

希望这有帮助,如果您有任何问题,请与我联系。