python - 将所有包含列表的列展开为自己的列
问题描述
给定以下数据框:
FrameLen FrameCapLen IPHdrLen ... TLSRecordLen TLSAppData PacketTime
0 [117, 66] [117, 66] [20, 20] ... [46.0, nan] [nan, nan] 0.000045
1 [117, 66] [117, 66] [20, 20] ... [46.0, nan] [nan, nan] 0.000024
2 [117, 66] [117, 66] [20, 20] ... [46.0, nan] [nan, nan] 0.000027
3 [117, 66] [117, 66] [20, 20] ... [46.0, nan] [nan, nan] 0.000024
4 [117, 66] [117, 66] [20, 20] ... [46.0, nan] [nan, nan] 0.000011
如何将包含列表的每一列扩展为相应的新列,这样FrameLen
就变成了FrameLen_1, FrameLen_2, ...
,等等?
我知道这可以手动为每一列手动完成(见下文),但如何自动完成?
手动操作示例(看起来效率低下?):
tags = df['FrameLen'].apply(pd.Series)
tags = column.rename(columns = lambda x : 'FrameLen_' + str(x))
pd.concat([df[:], tags[:]], axis=1)
del df['FrameLen']
解决方案
您可以使用for
循环df.add_prefix
来附加列名:
以下面的df为例:
In [93]: In [55]: df = pd.DataFrame({'FrameLen':[[117, 66], [117, 66], [117, 66]], 'FrameCapLen':[[117, 66],[117, 66],[117, 66]], 'IPHdrLen':[[20, 20],[20, 20],[20, 20]], 'PacketTime':[0.000045, 0.000024,
...: 0.000027]})
In [94]: df
Out[94]:
FrameLen FrameCapLen IPHdrLen PacketTime
0 [117, 66] [117, 66] [20, 20] 0.000045
1 [117, 66] [117, 66] [20, 20] 0.000024
2 [117, 66] [117, 66] [20, 20] 0.000027
In [90]: d = pd.DataFrame() ## empty dataframe
In [91]: for i,j in df.items():
...: if df['{}'.format(i)].dtype == 'object':
...: temp = pd.DataFrame(df[i].values.tolist()).add_prefix('{}_'.format(i))
...: d = pd.concat([d,temp], axis=1)
...: else:
...: d = pd.concat([d, df[i]], axis=1)
...:
In [92]: d
Out[92]:
FrameLen_0 FrameLen_1 FrameCapLen_0 FrameCapLen_1 IPHdrLen_0 IPHdrLen_1 PacketTime
0 117 66 117 66 20 20 0.000045
1 117 66 117 66 20 20 0.000024
2 117 66 117 66 20 20 0.000027
推荐阅读
- node.js - SMTP 电子邮件加密
- php - 如果电子邮件有效,则获取收件人电子邮件名称
- azure - 工作已经存在。如何删除作业?
- hyperledger-fabric - 超级账本作曲家网络更新
- javascript - Oracle Apex 树选定节点不工作
- java - Actuator Prometheus 的自定义指标
- java - 如何在 Java iOS 中读取 cmd 命令响应工具 -s 设备
- python - CloudWatch Logs 代理停止从 Jenkins 日志发送数据
- typescript - TypeScript:用其他东西替换命名空间
- c# - 从注册表的容器中删除项目 | C# .NET | 国际奥委会 | 结构图