当前位置: 首页 > 知识库问答 >
问题:

我如何拆分多行在不同的列在熊猫[重复]

锺离边浩
2023-03-14

在下面的例子中,我有电影的数据:

我想将标题列值拆分为2个新列,即其中一个新列(“电影标题”)将采用=玩具故事作为行值,另一个新列(“年份”)将采用= 1995作为行值。

如何对整个数据帧执行此操作?

                            title  \
0                    Toy Story (1995)   
1                      Jumanji (1995)   
2             Grumpier Old Men (1995)   
3            Waiting to Exhale (1995)   
4  Father of the Bride Part II (1995) 

共有3个答案

吴高畅
2023-03-14

使用正则表达式

df[['movie_title', 'year']] = df.title.str.extract('(.*)\s\((\d+)', expand=True)
df = pd.DataFrame({'title': 
                  ['Toy Story (1995)', 'Jumanji (1995)', 'Grumpier Old Men (1995)',
                   'Waiting to Exhale (1995)', 'Father of the Bride Part II (1995)', 
                   'Hello (Goodbye) (1995)'
                  ]})

df[['movie_title', 'year']] = df.title.str.extract('(.*)\s\((\d+)', expand=True)

输出:

                                title                  movie_title  year
0                    Toy Story (1995)                    Toy Story  1995
1                      Jumanji (1995)                      Jumanji  1995
2             Grumpier Old Men (1995)             Grumpier Old Men  1995
3            Waiting to Exhale (1995)            Waiting to Exhale  1995
4  Father of the Bride Part II (1995)  Father of the Bride Part II  1995
5              Hello (Goodbye) (1995)              Hello (Goodbye)  1995

我们使用的正则表达式是:<code>(.*)\(\d)</code>。

表达式的第一部分是:(.*)。括号表示它是一个捕获组,括号内的内容表示我们要捕获的内容。在本例中为<code>*表示我们贪婪地想要捕获一切。在捕获组之后,我们有\s\(,它字面上被解释为一个空格,后面是一个开括号,所以'(“因为在此之前的捕获组是贪婪的,如果有多个匹配,我们将捕获所有内容,直到最后一个(“)。(例如,查看它如何正确捕获你好(再见)(1995)

最后,我们添加了第二个捕获组,\d作为我们要捕获的内容,它捕获标题中最后一个'(“)之后的所有数字,对我们来说,这将是4位数的年份。

利思源
2023-03-14

如果您不想要regex解决方案,

df.title.str.rstrip(')').str.split('(').apply(pd.Series)


    0                           1
0   Toy Story                   1995
1   Jumanji                     1995
2   Grumpier Old Men            1995
3   Waiting to Exhale           1995
4   Father of the Bride Part II 1995
习斌
2023-03-14

尝试将str访问器与<code>split

df.title.str.split('\s\(|\)',expand=True)
  .drop(2, axis=1)
  .set_axis(['movies','year'], inplace=False, axis=1)

输出:

                        movies  year
0                    Toy Story  1995
1                      Jumanji  1995
2             Grumpier Old Men  1995
3            Waiting to Exhale  1995
4  Father of the Bride Part II  1995
 类似资料:
  • 我正在处理一个大的csv文件,下一列的最后一列有一个文本字符串,我想用一个特定的分隔符来分割。我想知道是否有一种简单的方法可以使用pandas或python来实现这一点? 我想按空格分割,然后按列中的冒号分割,但是每个单元格将导致不同数量的列。我有一个重新排列列的函数,所以列在工作表的末尾,但是我不确定从那里做什么。我可以在excel中使用内置的函数和一个快速宏来完成,但是我的数据集有太多的记录需

  • 我有一个熊猫的数据框,有一列是向量: 我想把它拆分成这样的元素: df2=pd.DataFrame({'ID':[1,2],'A':[1,4],'B':[2,5],'C':[3,6]}) 我试过但是没有运气.任何帮助将不胜感激。

  • 我正在将SQL查询的结果写入Excel工作表,并尝试将行转换为列,但似乎无法让Pandas移动;Excel似乎存在某种难题。我看过: 如何在数据帧中切换列和行 在groupby之后,如何将dataframe中的行值转换为Python中的列标签? 在Python中将列转换为行 Python:将行转换为列标题 似乎都不起作用。 Excel表格: 请求:

  • 问题内容: 假设我有一个数据框如下 现在,我希望a和b列不同的行。所以预期的输出是 我怎样才能做到这一点? 问题答案: 我喜欢可读性,请使用: 输出:

  • 我有一个数据帧: 如何拆分该列,使每个值都在自己的列中? 我找到的唯一答案是关于将一列拆分成两列。如何将一列拆分成两列?

  • 我想对两个不同的数据帧执行一些sql操作。不幸的是,就像我处理的数据一样,拼写通常是不同的。 下面是一个示例,其中userid属于df1,username属于df2。有人帮我吗?