python - 如何以安全的方式拆分同一列中的多个值,
问题描述
作为读取 pandas 数据框的程序的一部分。其中一列包含许多:
在同一列中分隔的值。要了解这些值的含义,还有另一列说明每个值是什么。
我想拆分这些值并将它们放在新列中,问题是我的程序中并非所有输入都接收完全相同类型的数据框,并且可以出现顺序或新值。
用一个例子更容易解释:
df1
Column1 Column2
GT:AV:AD 0.1:123:23
GT:AV:AD 0.2:456:24
df2
Column1 Column2
GT:AD:AV 0.4:23:123
GT:AD:AV 0.5:12:323
在意识到这个问题之前,我将这些数据拆分并将它们放入新列中是这样的:
file_data["GT"] = file_data[name_sample].apply(lambda x: x.split(":")[1])
file_data["AD"] = file_data[name_sample].apply(lambda x: x.split(":")[2])
如果我想要的是 GT 和 AD(如果输入数据框中有),我该如何以更安全的方式执行此操作?
解决方案
import pandas as pd
df = pd.DataFrame({"col1":["GT:AV:AD","GT:AD:AV"],"col2":["0.1:123:23","0.4:23:123"]})
df["keyvalue"] = df.apply(lambda x:dict(zip(x.col1.split(":"),x.col2.split(":"))), axis=1)
print(df)
输出
col1 col2 keyvalue
0 GT:AV:AD 0.1:123:23 {'GT': '0.1', 'AV': '123', 'AD': '23'}
1 GT:AD:AV 0.4:23:123 {'GT': '0.4', 'AD': '23', 'AV': '123'}
dict(zip(keys_list, values_list))
说明:我使用构造作为dict
s创建了包含键(来自 col1)和值(来自 col2)的列键值。apply
axis=1 对每一行应用函数,lambda
在 python 中用于创建无名函数。如果您希望拥有而pandas.DataFrame
不是带有dict
s 的列,您可以这样做
df2 = df.apply(lambda x:dict(zip(x.col1.split(":"),x.col2.split(":"))), axis=1).apply(pd.Series)
print(df2)
输出
GT AV AD
0 0.1 123 23
1 0.4 123 23
推荐阅读
- gdb - 使用 QEMU 和 GDB 调试 xv6:无法解析名称:提供节点名或服务名,或未知
- installshield - 我如何(以编程方式)知道 Installshield 安装程序何时静默运行?
- javascript - 获取请求未在控制台或前端返回任何数据
- c# - 基于相似性对一组字符串进行聚类,同时优化冗余
- azure - HTTP 触发 Azure 函数上的 Singleton scopeId 支持的绑定
- spring - 如何将此多部分文件上传迁移到 Spring Boot 2.4?
- reactjs - 渲染对象数组
- c# - Windows 窗体中的向上和向下箭头按钮 C# Visual Studio 2019
- r - 伽马障碍(两部分)模型和零膨胀伽马模型之间有区别吗?
- azure-api-management - 为什么 APIM 仅在将其添加为 CA 证书和证书时才验证我的客户端证书