2017-08-10 64 views
1

我正在讀取類似於以下內容的.txt文件中的數據,並且我在每個括號中提取第三項,代碼是底端。系列對象沒有拆分屬性 - 從文本文件中讀取數據

隨着線data = data.iloc[0, ::4],我從每4個數據點中刪除3(我認爲)。

但是,現在我試圖保留每個數據點。所以當我刪除線時, data = data.iloc[0, ::4],我收到以下錯誤:

"'Series' object has no attribute 'split'", 'occurred at index 0'

我不明白爲什麼刪除該行給我,我收到錯誤。總之,我想從每個支架中提取每三個項目,並將其存儲在pandasDataFrame中。但是,當我嘗試刪除行data = data.iloc[0, ::4]時,出現錯誤(如上所示)。

感謝您的支持!

enter image description here

data = pd.read_csv("C:\\Users\\Desktop\\data_test9.txt", sep="\[|\]\[|\]",engine = 'python', header = None) 
data = data.iloc[0, ::4] 
data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float) 
data.pop(0) 
xar = range(len(data) 
yar = pd.DataFrame(data) 

數據的片:

[0.0, -0.01953125, -0.0009765625][0.0, -0.01953125, -0.0009765625][0.0, -0.01953125, -0.0009765625][0.0, -0.01953125, -0.0009765625][0.0078125, -0.912109375, -0.00390625][0.0078125, -0.912109375, -0.00390625][0.0078125, -0.912109375, -0.00390625][0.0078125, -0.912109375, -0.00390625][0.0078125, -0.912109375, -0.00390625][0.0078125, -0.912109375, -0.00390625][0.0078125, -0.912109375, -0.00390625][0.0078125, -0.912109375, -0.00390625][0.0087890625, -0.978515625, -0.00390625][0.0087890625, -0.978515625, -0.00390625][0.0087890625, -0.978515625, -0.00390625][0.0087890625, -0.978515625, -0.00390625][0.0087890625, -0.978515625, -0.00390625][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9521484375, -0.0029296875][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.955078125, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0048828125][0.0078125, -0.9560546875, -0.0048828125][0.0078125, -0.9560546875, -0.0048828125][0.0078125, -0.9560546875, -0.0048828125][0.0078125, -0.9560546875, -0.0048828125][0.0078125, -0.9560546875, -0.0048828125][0.0078125, -0.9560546875, -0.0048828125][0.0078125, -0.9560546875, -0.0048828125][0.0087890625, -0.9560546875, -0.0029296875][0.0087890625, -0.9560546875, -0.0029296875][0.0087890625, -0.9560546875, -0.0029296875][0.0087890625, -0.9560546875, -0.0029296875][0.0087890625, -0.9560546875, -0.0029296875][0.0087890625, -0.9560546875, -0.0029296875][0.0087890625, -0.9560546875, -0.0029296875][0.0087890625, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0078125, -0.9560546875, -0.0029296875][0.0068359375, -0.9560546875, -0.00390625][0.0068359375, -0.9560546875, -0.00390625][0.0068359375, -0.9560546875, -0.00390625][0.0068359375, -0.9560546875, -0.00390625][0.0068359375, -0.9560546875, -0.00390625][0.0068359375, -0.9560546875, -0.00390625][0.0068359375, -0.9560546875, -0.00390625][0.0068359375, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625][0.0078125, -0.9560546875, -0.00390625] 

編輯1: 我的數據被保存如下:

while True: 
    delay(DELAY_INTERVAL) 

    file = open("C:\\Users\\Desktop\\demo3.txt", "a") 
    file.writelines(str(convert(readField()))) 
    file.flush() 
    file.close() 
+0

基本上,您應該重新考慮您保存數據的格式,它看起來像一個'print'轉儲。使用'csv'格式,或其他。 –

+0

因此,正如我懷疑你基本上將某些數據結構的'str'表示轉儲到文本文件。 *不要這樣做*。您將不得不按照您嘗試的方式將數據解析回數據結構。只需使用接受和支持的格式,如'csv'。那麼你不必編寫解析邏輯。 –

+0

我正在考慮使用'csvwriter'。這是一個好主意嗎? – Gary

回答

1

由於datapd.DataFrame,所以當你使用.apply函數時,它會傳遞一個pd.Series作爲函數的參數。 pd.Series沒有.split方法。當你這樣做:

data = data.iloc[0, ::4] 

您選擇第一行每4列,從第一個開始。此*返回pd.Series。所以考慮:

In [16]: df 
Out[16]: 
    a b c d e 
0 -10 17 17 14 -10 
1 2 10 0 4 -5 
2 16 10 1 -9 -6 
3 12 -6 10 5 3 
4 9 10 -4 10 3 
5 -8 16 4 17 0 
6 9 12 4 17 -5 
7 19 17 9 2 19 
8 1 4 10 10 12 
9 12 -1 9 -5 10 
10 -1 -3 4 11 5 
11 19 4 6 16 3 
12 5 19 -1 1 15 
13 18 2 15 0 7 
14 3 10 15 6 15 
15 8 12 3 -6 8 
16 14 0 -3 6 2 
17 -1 -5 -5 -3 16 
18 -2 12 17 17 13 
19 18 4 19 14 4 

In [17]: df.iloc[0, ::4] 
Out[17]: 
a -10 
e -10 
Name: 0, dtype: int64 

In [18]: type(df.iloc[0, ::4]) 
Out[18]: pandas.core.series.Series 

現在,當你.apply系列功能它在一系列的功能,這就是爲什麼你lambda的作品,因爲每個值是str,並通過各字符串確實有 a .split方法。

所以,也許你想:

In [19]: df.iloc[::4,:] 
Out[19]: 
    a b c d e 
0 -10 17 17 14 -10 
4 9 10 -4 10 3 
8 1 4 10 10 12 
12 5 19 -1 1 15 
16 14 0 -3 6 2 

In [20]: type(df.iloc[::4,:]) 
Out[20]: pandas.core.frame.DataFrame 

它選擇每四行,並返回一個數據幀。

+0

'df.iloc [:: 4,:]'仍然拋出同樣的錯誤。根據你對改變數據保存方式的評論 - 我包括瞭如何從python腳本中保存數據。你可以看看它,並提供有關如何使它更好的任何反饋? – Gary

+0

@Gary是的,如果你已經閱讀並理解我在說什麼,你會期望它拋出錯誤,因爲*返回一個數據幀*。你需要掌握你正在做的事情,而不是僅僅使用隨機切片和切塊你的數據框,直到它不會產生錯誤,而是代表垃圾! –