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 rows
和4 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)
?感謝您的任何幫助。
我真的很困惑,爲什麼你不能只使用'pd.read_table'導入文件?無論如何,嘗試'obs_df = pd.DataFrame.from_records(obs_array)'。 – Abdou
不知道pd.read_table。這工作,儘管有點粗略,因爲它將第一行解釋爲有6個元素,但這很容易解決。謝謝! – socxc9