How to count elements with a condition in csv file using python

Viewed 370

I am new to python language. I have a table in csv format with n columns where the header is Tax_id and every column contains species names like this

9606                  9606.1               508771  
0                root                root                  root    
1  cellular organisms  cellular organisms    cellular organisms
2           Eukaryota           Eukaryota             Eukaryota
3        Opisthokonta        Opisthokonta                   Sar
4             Metazoa             Metazoa             Alveolata
5           Eumetazoa           Eumetazoa           Apicomplexa
6           Bilateria           Bilateria           Conoidasida
7       Deuterostomia       Deuterostomia              Coccidia
8            Chordata            Chordata        Eucoccidiorida
9            Craniata            Craniata           Eimeriorina

What I want to do is to be able to write a python code that counts each species with their occurrence only for columns that contains species named "Metazoa".

#to return something like

    Eumetazoa 2
    Bilateria 2
    Craniata  2
1 Answers

I'm still not entirely sure what you want. Does something like this work? Note you need to install the package pandas for this (How to install pandas).

What I assume your CSV file looks like:

s = '''9606,9606.1,508771
0,root,root,root
1,cellular organisms,cellular organisms,cellular organisms
2,Eukaryota,Eukaryota,Eukaryota
3,Opisthokonta,Opisthokonta,Sar
4,Metazoa,Metazoa,Alveolata
5,Eumetazoa,Eumetazoa,Apicomplexa
6,Bilateria,Bilateria,Conoidasida
7,Deuterostomia,Deuterostomia,Coccidia
8,Chordata,Chordata,Eucoccidiorida
9,Craniata,Craniata,Eimeriorina'''

Algorithm:

import pandas as pd
from io import StringIO

def filter_and_count(df, search_string):
    df_filtered = df.loc[:, (df == search_string).any(axis=0)]
    return pd.melt(df_filtered)['value'].value_counts()

df = pd.read_csv(StringIO(s))  # replace this with read_csv("filename")
print(filter_and_count(df, 'Metazoa'))

Output:

root                  2
Metazoa               2
Deuterostomia         2
Craniata              2
cellular organisms    2
Chordata              2
Eumetazoa             2
Opisthokonta          2
Eukaryota             2
Bilateria             2
Name: value, dtype: int64
Related