将 Pandas 中的列分解为单独的 CSV 以在 Tableau 中显示

数据挖掘 Python 熊猫 CSV 画面
2022-02-22 12:32:38

我的数据来自 CSV,应该在 Tableau 中可视化。

但是,数据包含列category_list,该列由由竖线 ( |) 分隔的值组成。

由于 Tableau 无法处理属性内的数组,我使用 Python (Pandas) 加载 CSV 并操作数据:

import pandas as pd
companies = pd.read_csv("companies.csv")

我假设该category_list列需要分解并存储到另一个 CSV(包含permalink(唯一 ID)和category对)中。

像这样的东西:

permalink,category
/organization/-qounter,Application Platforms
/organization/-qounter,Real Time
/organization/-qounter,Social Network Media
/organization/-the-one-of-them-inc-,Apps
/organization/-the-one-of-them-inc-,Games
/organization/-the-one-of-them-inc-,Mobile
/organization/1-4-all,Entertainment
/organization/1-4-all,Games
/organization/1-4-all,Software
/organization/1-800-publicrelations-inc-,Internet
/organization/1-800-publicrelations-inc-,Marketing
/organization/1-800-publicrelations-inc-,Media
/organization/1-800-publicrelations-inc-,Public Relations
/organization/1-mainstream,Apps
/organization/1-mainstream,Cable
/organization/1-mainstream,Distribution
/organization/1-mainstream,Software
...

如何实现?

原始 CSV 的摘录:

permalink,category_list,...
/organization/-qounter,Application Platforms|Real Time|Social Network Media,...
/organization/-the-one-of-them-inc-,Apps|Games|Mobile,...
/organization/1-4-all,Entertainment|Games|Software,...
/organization/1-800-publicrelations-inc-,Internet|Marketing|Media|Public Relations,...
/organization/1-mainstream,Apps|Cable|Distribution|Software,...
...
2个回答

如果您不需要其他列,这里有一个解决方案。它拆分列,垂直堆叠并与“永久链接”列结合

df.set_index('permalink').category_list.str.split('|', expand=True).stack().reset_index('permalink').rename(columns={0:'category'})

permalink   category
0   /organization/-qounter  Application Platforms
1   /organization/-qounter  Real Time
2   /organization/-qounter  Social Network Media
0   /organization/-the-one-of-them-inc- Apps
1   /organization/-the-one-of-them-inc- Games
2   /organization/-the-one-of-them-inc- Mobile
0   /organization/1-4-all   Entertainment
1   /organization/1-4-all   Games
2   /organization/1-4-all   Software
0   /organization/1-800-publicrelations-inc-    Internet
1   /organization/1-800-publicrelations-inc-    Marketing
2   /organization/1-800-publicrelations-inc-    Media
3   /organization/1-800-publicrelations-inc-    Public Relations
0   /organization/1-mainstream  Apps
1   /organization/1-mainstream  Cable
2   /organization/1-mainstream  Distribution
3   /organization/1-mainstream  Software

然后你可以把它保存到csv。

如果是一次性转换,您可以简单地在 Excel 本身中分离字段的内容。执行以下步骤:

  1. 在 MS Excel 中打开文件
  2. 转到数据选项卡
  3. 单击文本到列选项
  4. 选择分隔
  5. 设置 | 或任何其他需要的字符作为字段分隔符/拆分器

但是,这只是在它不是周期性转换要求的情况下。如果是这样,@Andrey Lukyanenko 的解决方案是一个更好的解决方案。