簡體   English   中英

Python Pandas文件解析:“ \\ n \\ n”定界符的另一個矩陣維

[英]Python Pandas File Parsing: Another matrix dimension for “\n\n” delimiter

在我的文本文件中,每個“ \\ n \\ n”行都將不同的模擬結果分開,因此我需要將它們分開。

有沒有辦法在熊貓的矩陣表中添加另一個維度? 還是在每N行的部分中拉出numpy數組(在我的情況下為8)?

熊貓讀取以下數據:

    xPos    yPos    range    otherData ...
 0 -800.0   711.2    6100     73.56
 1 -700.0   751.2    6100     73.56
 2 -600.0   701.2    6100     73.56
 3 -500.0   741.2    6100     73.56
 4 -400.0   700.2    6100     73.56
 5 -300.0   677.2    6100     73.56
 6 -200.0   789.2    6100     73.56
 7 -100.0   200.2    6100     73.56
                                    # pandas cobines \n\n sections
 8 -800.0   711.2    6100     73.56
 9 -700.0   751.2    6100     73.56
10 -600.0   701.2    6100     73.56
11 -500.0   741.2    6100     73.56
12 -400.0    97.0    6100     73.56
13 -300.0   677.2    6100     73.56
14 -200.0   789.2    6100     73.56
15 -100.0   200.2    6100     73.56

16 -800.0   711.2    6100     73.56
17 -700.0   751.2    6100     73.56
18 -600.0   701.2    6100     73.56
19 -500.0   741.2    6100     73.56
20 -400.0   700.2    6100     73.56
21 -300.0   677.2    6100     73.56
22 -200.0   789.2    6100     73.56
23 -100.0   200.2    6100     73.56

如果沒有簡單的解決方案來解決我要問的問題,那么制作每個部分的矩陣數組的最簡單方法是什么? 我需要為每個模擬輕松訪問pd_data['xPos']

我想訪問如下數據:

# [sim run #] [row] [col]
print(simRun[1][4][1])     # prints 97.0 in the example above

run2 = 1
print(simRun[run2][len(run2)-1]['yPos'] # prints 200.2 in the example above

請記住,這些文本文件可能包含數千個模擬結果,因此非常龐大。


泰勒,您的代碼運行良好,但是...(太近了!)

這是我做舊的“蠻力”方式:

fd = pd.read_csv(sys.argv[1],sep='\s{2,}',comment='#',engine='python')
nSim = int(len(fd)/8)
xRange = []
for x in range(nSim):
    xRange.append(fd['xPos'][x*8])
print(xRange) # This works for the time being.
xPlot = np.array(xRange)

目的是在每個單獨的模擬運行中獲取x和y的起始位置,因此我可以將其用於繪圖和其他分析。 塊的第一行是每個sim的初始開始位置。

這是我應用代碼的方法:

sims = []
cSize = 9 # I had to go bigger than every 8 here to account for "\n\n"
for chunk in pd.read_csv(sys.argv[1],sep='\s{2,0}',comment='#',engine='python',chunksize=cSize):
    sims.append(chunk)
for s in range(len(sims)):
    print(sims[s]['xPos'][7]) # This results in error.
print(sims[0]['xPos'][7]) # This works fine.

該代碼似乎可以正常工作,為列表中的每個塊提供了自己的標頭。 但是,無法獲取所有塊中x位置(col)的最后一行是行不通的。

感謝您提供有關如何使底層代碼正常工作的反饋。 文本文件中充滿了數據列,通過標題名稱訪問它們將使我的一天變得更輕松。

如果您事先知道分區的大小,則可以逐塊讀取它們。 (示例數據中的塊大小為8。)我還假設您正在讀取一個csv文件。

chunksize = 8
for chunk in pd.read_csv('file_name1.csv', chunksize=chunksize):
    print(chunk)

或創建帶有扇區標簽的新數據框:

df = pd.DataFrame()
chunksize = 8
for counter, chunk in enumerate(pd.read_csv('file_name1.csv', chunksize=chunksize)):
    chunk['sector'] = counter
    df = df.append(chunk)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM