背景:加入现在有这样的数据,可能一条ocr代表两个label,并且label通过","分隔。我们想把数据转换成下面的。

原始数据:

label

ocr

日常行车服务,汽车资讯

去加油站,加完油后直接离开?最开心的可能是加油站的工作人员

社会民生

已致2死20伤 !景区突遭尘卷风袭击,孩子被卷上天!现场画面曝光

目标数据:

label

ocr

日常行车服务

去加油站,加完油后直接离开?最开心的可能是加油站的工作人员

汽车资讯

去加油站,加完油后直接离开?最开心的可能是加油站的工作人员

社会民生

已致2死20伤 !景区突遭尘卷风袭击,孩子被卷上天!现场画面曝光

实现办法:

1.通过hive代码:

select ocr,split(tag_info,',') label
from
(
select label,ocr
from t1
lateral view explode(split(label,',')) TableName as tag_info
) t;

要注意的是一定要添加 t 语句另命名。

2.通过python代码:

df0 = pd.DataFrame({'A':[[1,2],[5,6]],'B':[10,-20]})
df0 = df
df0.columns = ['A','B']
rows = []
for i, row in df0.iterrows():
for a in row.A.split(","):
rows.append((a, row.B))
df222 = pd.DataFrame(rows, columns=df.columns)
df222