如何使用 python 计算 csv 文件中具有条件的元素
How to count elements with a condition in csv file using python
我是 python 语言的新手。我有一个 csv 格式的 table,有 n 列,其中 header 是 Tax_id,每列都包含这样的物种名称
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
我想要做的是能够编写一个 python 代码来计算每个物种的出现次数,仅针对包含名为“后生动物”的物种的列。
#to return something like
Eumetazoa 2
Bilateria 2
Craniata 2
我还不能完全确定你想要什么。这样的东西有用吗?请注意,您需要为此安装软件包 pandas (How to install pandas)。
我假设您的 CSV 文件如下所示:
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'''
算法:
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'))
输出:
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
我是 python 语言的新手。我有一个 csv 格式的 table,有 n 列,其中 header 是 Tax_id,每列都包含这样的物种名称
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
我想要做的是能够编写一个 python 代码来计算每个物种的出现次数,仅针对包含名为“后生动物”的物种的列。
#to return something like
Eumetazoa 2
Bilateria 2
Craniata 2
我还不能完全确定你想要什么。这样的东西有用吗?请注意,您需要为此安装软件包 pandas (How to install pandas)。
我假设您的 CSV 文件如下所示:
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'''
算法:
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'))
输出:
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