【问题标题】:Take column of string data in pandas dataframe and split into separate columns在 pandas 数据框中获取字符串数据列并拆分为单独的列
【发布时间】:2016-09-15 22:47:31
【问题描述】:

我从 CSV 读取的数据中有一个 pandas 数据框。一列是组的名称,而另一列包含一个字符串(看起来像一个列表),如下所示:

Group      |  Followers
------------------------------------------
biebers    |  u'user1', u'user2', u'user3'
catladies  |  u'user4', u'user5'
bkworms    |  u'user6', u'user7'

我想尝试拆分“Followers”列中的字符串并创建一个单独的数据框,其中每一行用于用户,以及显示他们所在组的列。因此对于此示例我想得到以下内容:

User       |     Group
--------------------------------
user1      |     biebers
user2      |     biebers
user3      |     biebers
user4      |     catladies
user5      |     catladies
user6      |     bkworms
user7      |     bkworms

有人对解决此问题的最佳方法有建议吗?这是它的截图:

【问题讨论】:

  • “看起来像列表的字符串”是什么意思?它看起来像多个 unicode 字符串的列表吗?那是怎么进去的?
  • 是的,这些条目都是字符串(恰好看起来像一个 unicode 字符串列表)。数据是从 CSV 读取的,它返回所有条目的字符串...
  • 你能把df.head(10)的结果贴出来
  • 好的,我附上了截图。

标签: python pandas


【解决方案1】:
df.Followers = df.Followers.str.replace(r"u'([^']*)'", r'\1')

df.set_index('Group').Followers.str.split(r',\s*', expand=True) \
  .stack().rename('User').reset_index('Group').set_index('User')


User 保留为一列。

df.Followers = df.Followers.str.replace(r"u'([^']*)'", r'\1')

df.set_index('Group').Followers.str.split(r',\s*', expand=True) \
  .stack().rename('User').reset_index('Group') \
  .reset_index(drop=True)[['User', 'Group']]

【讨论】:

  • 哇哦,从来不知道expand=True会派上用场。
  • 太棒了!我想知道如何制作 df 以便用户不是索引,而只是另一列...抱歉,我不清楚我需要的确切输出...
  • @Imu easy,这是我的选择。我会更新我的帖子。
  • 对于第二个选项,我得到:KeyError: ('User', 'Group')。知道那里会发生什么吗?
  • @Imu 修正错字
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 2022-08-19
  • 2011-05-20
相关资源
最近更新 更多