我有来自CSV(gist with small sample)的数据帧:
| title | genres |
--------------------------------------------------------
| %title1% |[{id: 1, name: '...'}, {id: 2, name: '...'}]|
| %title2% |[{id: 2, name: '...'}, {id: 4, name: '...'}]|
...
| %title9% |[{id: 3, name: '...'}, {id: 9, name: '...'}]|
每个title
可以与不同类型的计数相关联(大于或等于1)。你知道吗
任务是将数组从genre
列转换为列,并为每个类型放置一个(或True
):
| title | genre_1 | genre_2 | genre_3 | ... | genre_9 |
---------------------------------------------------------
| %title1% | 1 | 1 | 0 | ... | 0 |
| %title2% | 1 | 0 | 0 | ... | 0 |
...
| %title9% | 0 | 0 | 1 | ... | 1 |
流派是一个固定的集合(在这个集合中大约有20个项目)。你知道吗
简单的方法是:
genres
列中,并用1填充该类型的列。你知道吗这种方法看起来有点奇怪。你知道吗
我认为熊猫有一个更合适的方法。你知道吗
如果你的csv数据看起来像这样。你知道吗
(我将引号添加到genres json的键中只是为了方便地使用json包。因为这不是主要的问题,所以可以作为预处理来完成)
您必须遍历输入DataFrame的所有行。你知道吗
在get\ dataframe\中,为\行函数:
然后为每一行构建一个数据帧,并将它们连接到一个完整的数据帧。 pd.concat公司()连接从每行获得的数据帧。 将合并已存在的组件。你知道吗
最后,
fullDataFrame.fillna(0)
将NaN替换为0您的最终数据帧将如下所示。
以下是完整代码:
据我所知,没有办法以矢量化的方式对Pandas数据帧执行JSON反序列化。您应该能够做到这一点的一种方法是使用^{} ,它将允许您在一个循环中完成这一点(尽管比大多数内置操作要慢)。你知道吗
请注意,带有的空单元格必须用} 来更改此设置。一个简单的示例,其数据帧非常相似
NaN
而不是0填充。您应该使用^{无
iterrows
的完整工作溶液:相关问题 更多 >
编程相关推荐