【问题标题】:how to extract first part of name(first name) in a list that contains full names and discard names with one part如何在包含全名的列表中提取名称的第一部分(名字)并丢弃带有一部分的名称
【发布时间】:2021-06-23 16:57:47
【问题描述】:
我有一个包含一列名称的 CSV 文件。我想要的是一个 python 代码来检查列中的每个名称并查看该名称是否有多个部分,它只需要第一部分并将其附加到一个新的 CSV 文件列表中,同时它会跳过任何只有一个部分的名称在旧的 CSV 文件中。
举例
输入 CSV 文件
Column1
Metarhizium robertsii ARSEF 23
Danio rerio
Parascaris equorum
Hevea
Gossypium
Vitis vinifera
输出的 CSV 文件应该是
Column1
Metarhizium
Danio
Parascaris
Vitis
【问题讨论】:
标签:
python
list
csv
bioinformatics
biopython
【解决方案1】:
您可以先为那些包含多个单词的值创建一个标志,然后使用apply() 方法并编写一个 lambda 函数来检索所有名称中的第一个单词。
flag = df.loc[:,'Column1'].str.split(' ').apply(len) > 1
split_names = lambda name: name.split()[0] if (len(name.split())) else None
new_df = df.loc[flag,'Column1'].apply(split_names)
new_df.to_csv('output.csv', index=False)
【解决方案2】:
您可以拆分然后应用函数len 来屏蔽结果,然后在行中获取过滤后的第一个元素。
import pandas as pd
df = pd.read_csv("input.csv")
splitted = df.Column1.apply(lambda x: x.split())
output = splitted[splitted.apply(len) > 1].apply(lambda x: x[0])
output.to_csv("output.csv")
# > ,Column1
# 0,Metarhizium
# 1,Danio
# 2,Parascaris
# 5,Vitis
【解决方案3】:
名称是否总是用空格分隔?
您可以在 python 中使用re 模块并使用正则表达式,或者如果您正在寻找简单的东西,您也可以在 python 中使用str.split() 方法:
for name in column:
split_name = name.split(' ', 1) #Splits the name once after the first space and returns a list of strings
if len(split_name) > 1: new_csv.write(split_name[0]) #write the first part of the split up name into the new csv