[英]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.