[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