首页 / PYTHON / python-将熊猫对象展平到列
python-将熊猫对象展平到列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-将熊猫对象展平到列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3279字,纯文字阅读大概需要5分钟。
内容图文
![python-将熊猫对象展平到列](/upload/InfoBanner/zyjiaocheng/667/906442fccfb14a4db65b8eb27a81eab5.jpg)
我正在尝试从DataFrame展平列表.我现有的DataFrame看起来像这样:
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
然后,我清理“标签”列中的标签字符串:
def tag_cleaner(s):
s0 = "".join(s.split("<")).split(">")
return [i for i in s0 if i != ""]
df["Tags"] = df["Tags"].apply(lambda t: tag_cleaner(t))
df["NumTags"] = df["Tags"].apply(lambda x: len(x))
结果是:
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
对于“标签”列中的每个标签,我想在适当的“索引”列中插入标签.因此,最终结果应如下所示:
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()以及创建新DataFrame并将它们合并在一起的各种形式,但似乎找不到合适的组合.如何将“标签”列中的每个对象展平到同一行的适当列?
解决方法:
在这种情况下,我将使用.str.extractall()方法:
In [57]: df
Out[57]:
CreationDate Tags
0 2013-12-22 15:25:02 <ubuntu><mac-osx><syslinux>
1 2009-12-14 14:29:32 <ubuntu><mod-rewrite><laconica><apache-2.2>
2 2013-12-22 15:42:00 <ubuntu><nat><squid><mikrotik>
In [58]: x = df.pop('Tags').str.extractall(r'\<(.*?)\>').unstack()
In [59]: x.columns = x.columns.droplevel(0)
In [60]: df.join(x)
Out[60]:
CreationDate 0 1 2 3
0 2013-12-22 15:25:02 ubuntu mac-osx syslinux None
1 2009-12-14 14:29:32 ubuntu mod-rewrite laconica apache-2.2
2 2013-12-22 15:42:00 ubuntu nat squid mikrotik
更新:假设数据是一个系列,而不是一个DataFrame:
In [14]: s
Out[14]:
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
In [15]: type(s)
Out[15]: pandas.core.series.Series
In [16]: x = s.str.extractall(r'\<(.*?)\>').unstack().rename_axis(None)
In [17]: x.columns = x.columns.droplevel(0)
In [18]: x
Out[18]:
match 0 1 2 3
2009-12-14 14:29:32 ubuntu mod-rewrite laconica apache-2.2
2013-12-22 15:25:02 ubuntu mac-osx syslinux None
2013-12-22 15:42:00 ubuntu nat squid mikrotik
内容总结
以上是互联网集市为您收集整理的python-将熊猫对象展平到列全部内容,希望文章能够帮你解决python-将熊猫对象展平到列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。