微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在包含全名的列表中提取名称名字的第一部分并丢弃一部分名称

如何解决如何在包含全名的列表中提取名称名字的第一部分并丢弃一部分名称

我有一个包含一列名称的 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 中使用 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
   
,

您可以拆分然后应用函数 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
,

您可以先为那些包含多个单词的值创建一个标志,然后使用 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。