2017-10-06 100 views
0
python 3.5.2 
numpy 1.11.1 

我在创建从分手了一个文本文件中创建一个2-dimensional list一个dataframe问题。下面是文本文件的样本:不能创建从2D列表中的数据框大熊猫

#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,这只是一个空的''。所以,我现在有一个2维列表,其中有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解释obs_array的形状为(30720,4)?感谢您的任何帮助。

+0

我真的很困惑,为什么你不能只使用'pd.read_table'导入文件?无论如何,尝试'obs_df = pd.DataFrame.from_records(obs_array)'。 – Abdou

+0

不知道pd.read_table。这工作,尽管有点粗略,因为它将第一行解释为有6个元素,但这很容易解决。谢谢! – socxc9

回答

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 

希望这有助于让我知道,如果你有任何问题。