如何将一列分为两列

时间:2019-04-07 02:20:27

标签: mysql sql hive

我遇到了一个名为“电影”的表格的问题。我发现日期和电影标题都在标题栏中。如图所示:

Sample

我不知道该如何处理此类问题。因此,我尝试使用此代码以使其类似于MySQL代码,但我还是没有工作。

DataFrame(row.str.split(' ',-1).tolist(),columns = ['title','date'])

如何将其分为两列(标题,日期)?

3 个答案:

答案 0 :(得分:3)

如果您使用的是MySQL 8+,那么我们可以尝试使用import pandas as pd import seaborn as sns DF1 = pd.DataFrame({'index': ['A', 'B', 'C'], 'Number': [110, 22, 52]}) DF2 = pd.DataFrame({'index': ['A', 'B', 'C'], 'Number': [100, 22, 52]}) DF3 = pd.DataFrame({'index': ['A', 'B', 'C'], 'Number': [90, 12, 10]}) DF = pd.concat([DF1, DF2, DF3]) DF['df_num'] = ['1','1','1','2','2','2','3','3','3'] sns.barplot(data = DF, x='index', y='Number', hue='df_num')

REGEXP_REPLACE

Demo

这是一个常规的正则表达式模式,可以匹配您的标题字符串:

SELECT
    REGEXP_REPLACE(title, '^(.*)\\s\\(.*$', '$1') AS title,
    REGEXP_REPLACE(title, '^.*\\s\\((\\d+)\\)$', '$1') AS date
FROM yourTable;

说明:

^.*\s\((\d+)\)$

答案 1 :(得分:1)

我会简单地做:

select left(title, length(title) - 7) as title,
       replace(right(title, 5) ,')', '') as year

对于这种逻辑,正则表达式似乎有些过分。

在Hive中,您需要为此使用substr()

select substr(title, 1, length(title) - 7) as title,
       substr(title, length(title) - 5, 4) as year

答案 2 :(得分:0)

经过努力和搜索,我能够构建出完美运行的命令。

select
   translate(substr(title,0,length(title) -6) ,'', '') as title,
   translate(substr(title, -5) ,')', '') as date
from movies;

也感谢那些回答的人!