[Tutor] Extract Block of Data from a 2D Array

Peter Otten __peter__ at web.de
Fri Mar 31 10:50:43 EDT 2017


Stephen P. Molnar wrote:

> I have a block of data extracted from a quantum mechanical calculation:
> 
> CARTESIAN COORDINATES (A.U.)
> ----------------------------
>    NO LB      ZA    FRAG     MASS         X           Y           Z
>     0 C     6.0000    0    12.011   -3.265636    0.198894    0.090858
>     1 C     6.0000    0    12.011   -1.307161    1.522212    1.003463
>     2 C     6.0000    0    12.011    1.213336    0.948208   -0.033373
>     3 N     7.0000    0    14.007    3.238650    1.041523    1.301322
>     4 C     6.0000    0    12.011   -5.954489    0.650878    0.803379
>     5 C     6.0000    0    12.011    5.654476    0.480066    0.013757
> 
> where the number of lines depends upon the molecule being considered.
> 
> I want to extract the block of data starting on line 4 and column 4.
> Unfortunately, the only programming language in which I used to be
> competent in is Fortran.  I have attempted researching this problem, but
> have only succeeded in increasing my mental entropy.
> 
> Help will be much appreciated.  Thanks in advance.
> 

pandas is the swiss army knife of data manipulation in Python -- albeit with 
a non-negligable learning curve. Some examples (from an amateur):

$ cat data.txt
CARTESIAN COORDINATES (A.U.)
----------------------------
   NO LB      ZA    FRAG     MASS         X           Y           Z
    0 C     6.0000    0    12.011   -3.265636    0.198894    0.090858
    1 C     6.0000    0    12.011   -1.307161    1.522212    1.003463
    2 C     6.0000    0    12.011    1.213336    0.948208   -0.033373
    3 N     7.0000    0    14.007    3.238650    1.041523    1.301322
    4 C     6.0000    0    12.011   -5.954489    0.650878    0.803379
    5 C     6.0000    0    12.011    5.654476    0.480066    0.013757
$ python3
Python 3.4.3 (default, Nov 17 2016, 01:08:31) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>> table = pandas.read_table("data.txt", skiprows=2, delimiter=" ", 
skipinitialspace=True)
>>> table
   NO LB  ZA  FRAG    MASS         X         Y         Z
0   0  C   6     0  12.011 -3.265636  0.198894  0.090858
1   1  C   6     0  12.011 -1.307161  1.522212  1.003463
2   2  C   6     0  12.011  1.213336  0.948208 -0.033373
3   3  N   7     0  14.007  3.238650  1.041523  1.301322
4   4  C   6     0  12.011 -5.954489  0.650878  0.803379
5   5  C   6     0  12.011  5.654476  0.480066  0.013757

[6 rows x 8 columns]
>>> table[3:]
   NO LB  ZA  FRAG    MASS         X         Y         Z
3   3  N   7     0  14.007  3.238650  1.041523  1.301322
4   4  C   6     0  12.011 -5.954489  0.650878  0.803379
5   5  C   6     0  12.011  5.654476  0.480066  0.013757

[3 rows x 8 columns]
>>> table[["X", "Y", "Z"]]
          X         Y         Z
0 -3.265636  0.198894  0.090858
1 -1.307161  1.522212  1.003463
2  1.213336  0.948208 -0.033373
3  3.238650  1.041523  1.301322
4 -5.954489  0.650878  0.803379
5  5.654476  0.480066  0.013757

[6 rows x 3 columns]
>>> table.MASS.mean()
12.343666666666666




More information about the Tutor mailing list