python - Pandas DataFrame 的多循环和多拆分
问题描述
我有一个包含 22000 行作者姓名的 CSV 文件。
- 每行有多个作者姓名,由“;”分隔。
- 一行中的每个作者姓名都按“姓氏,名字”顺序排列。
我想拆分它们并附加到新列,如下所示。
原始数据集预览:
+------------------------------------+
| author_full_name |
+------------------------------------+
| Kahana, M J; Adler, M |
|Gautam, H; Potdar, G G; Vidya, T N C|
+------------------------------------+
预期输出:
+------------------------------------+------------------------------------------+
| author_full_name | author_first_names| author_last_names |
+------------------------------------+------------------------------------------+
| Kahana, M J; Adler, M | M J; M | Kahana; Adler |
|Gautam, H; Potdar, G G; Vidya, T N C| H; G G; T N C | Gautam; Potdar; Vidya|
+------------------------------------+------------------------------------------+
我怎样才能用熊猫做到这一点?
解决方案
这里的逻辑本质上是先拆分,;
然后拆分每个值, ,
并将它们的第一个值作为 ;ast 名称,将第二个值作为名字
>>> [x.split(",")[0] for x in "Gautam, H; Potdar, G G; Vidya, T N C".split(";")]
>>> ['Gautam', ' Potdar', ' Vidya']
在使用应用的熊猫中:
import pandas as pd
df = pd.DataFrame({"Name":["Gautam, H; Potdar, G G; Vidya, T N C","Kahana, M J; Adler, M "]})
df['author_last_names'] = df['Name'].apply(lambda x: ";".join([ele.split(",")[1] for ele in x.split(";")]))
df['author_first_names'] = df['Name'].apply(lambda x: ";".join([ele.split(",")[0] for ele in x.split(";")]))
df
输出:
------------------------------------|-----------------|------------------------
Gautam, H; Potdar, G G; Vidya, T N C H; G G; T N C Gautam; Potdar; Vidya
Kahana, M J; Adler, M M J; M Kahana; Adler
------------------------------------|-----------------|------------------------
推荐阅读
- python - Python: handling large numbers
- php - 在 PHP 中通过 JS 块中的数据爬行
- univocity - @Validate 在 UniVocity 解析器中与 CsvRoutines 一起使用时不会跳过无效行
- for-loop - 如何在此代码中使用 for 循环与 while 循环
- go - 配置结构接收器以使用某种类型
- google-cloud-platform - 谷歌云浏览器 ssh 下载功能异常
- mysql - 选择体育赛事较少的5个运动项目
- pyspark - Pyspark 不工作并抛出 java 异常:Java 网关进程在发送其端口号之前退出
- javascript - 从多页 html 网站获取与事件侦听器相关的错误
- sql - 数据集中出现 SQL 计数,但变量值可以交换