我正试图从一个数据帧展平一个列表。我现有的数据帧如下所示:
CreationDate
2013-12-22 15:25:02 <ubuntu><mac-osx><syslinux>
2009-12-14 14:29:32 <ubuntu><mod-rewrite><laconica><apache-2.2>
2013-12-22 15:42:00 <ubuntu><nat><squid><mikrotik>
Name: Tags, dtype: object
然后,我清理Tags
列中的标记字符串:
结果是:
CreationDate
2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux] 3
2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2] 4
2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik] 4
现在,我为每个标记创建新列:
tag_df = pd.DataFrame(index=df.index, data=df["Tags"])
max_cols = tag_df["Tags"].map(len).max()
for col in range(max_cols):
tag_df[col] = pd.Series(index=tag_df.index)
这给了我这样一个结论:
CreationDate
2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux] NaN NaN NaN NaN NaN
2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2] NaN NaN NaN NaN NaN
2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik] NaN NaN NaN NaN NaN
对于Tags
列中的每个标记,我想在其相应的“index”列中插入标记。所以,最终结果应该是这样的:
CreationDate
2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux] ubuntu mac-osx syslinux NaN NaN
2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2] ubuntu mod-rewrite laconica apache-2.2 NaN
2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik] ubuntu nat squid mikrotik NaN
我尝试过pd.DataFrame.insert()
和各种形式的创建新数据帧并将它们合并在一起,我似乎找不到合适的组合。如何将Tags
列中的每个对象展平到它在同一行上的相应列?在
在这种情况下,我将使用.str.extractall()方法:
更新:假设数据是序列,而不是数据帧:
^{pr2}$获取长度并转换为列表的部分解决方案。在
工作液
^{pr2}$只需注释掉这些注释并复制到剪贴板,然后再进行注释。然后运行代码。在
输出:
相关问题 更多 >
编程相关推荐