Python文件解析:另一个矩阵维度\n\n“;分隔符

Python文件解析:另一个矩阵维度\n\n“;分隔符,python,arrays,pandas,parsing,Python,Arrays,Pandas,Parsing,在我的文本文件中,每个“\n\n”行分隔不同的模拟结果,我需要将它们分隔开 有没有办法在pandas中向矩阵表添加另一个维度?或者在每N行的部分中拉取numpy数组(在我的例子中是8行) Panda正在以下位置读取数据: 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 610

在我的文本文件中,每个“\n\n”行分隔不同的模拟结果,我需要将它们分隔开

有没有办法在pandas中向矩阵表添加另一个维度?或者在每N行的部分中拉取numpy数组(在我的例子中是8行)

Panda正在以下位置读取数据:

    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_数据['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)

你从什么地方读到这些数据了吗?如果是这样,您可以在
\n\n
上拆分该文件并创建单独的dataframesIt,因为它是从.txt文件读取的。有多个文件要处理,每个.txt文件都是一个不同的“配置文件/场景”,里面充满了网格(x&y)模拟。谢谢,泰勒。我会试试这个,让你知道它是怎么回事。