我有一個這樣的資料集
import pandas as pd
df = pd.read_csv("music.csv")
df
| 姓名 | 日期 | 歌手 | 語 | 階段 | |
|---|---|---|---|---|---|
| 1 | 是還是不是 | 02.01.20 | 本杰明·史密斯 | zh | 1 |
| 2 | 對羥基苯甲酸酯 | 01.06.21 | 拉斐爾·加爾沃;西蒙·墨菲 | pt;en | 2 |
| 3 | 愛 | 12.11.20 | 米凱拉·康德爾 | zh | 1 |
| 4 | 帕茲 | 19 年 7 月 11 日 | 安娜佩雷斯; 愛德華達平托 | es;pt | 3 |
| 5 | 停止 | 12.01.21 | 邁克爾·康威;加布里埃爾·李 | zh;zh | 1 |
| 6 | 沙洛姆 | 21 年 6 月 18 日 | 西蒙·科恩 | 希伯來 | 1 |
| 7 | 哈比比 | 22.12.19 | 福阿德·庫里 | 阿爾 | 3 |
| 8 | 萬歲 | 01.08.21 | 維羅妮卡巴恩斯 | zh | 1 |
| 9 | 布茲南納 | 20 年 9 月 23 日 | 庫爾特·阿佐帕迪 | 公噸 | 1 |
| 10 | 弗里登 | 21.05.21 | 加布里埃爾·邁耶 | dt | 1 |
| 11 | 烏拉圭 | 11.04.21 | 胡里奧·拉米雷斯 | es | 1 |
| 12 | 美麗的 | 21 年 3 月 17 日 | 卡梅倫·阿姆斯特朗 | zh | 3 |
| 13 | 假期 | 20 年 6 月 19 日 | 比安卡·沃森 | zh | 3 |
| 14 | 獼猴桃 | 21.10.20 | 拉克蘭麥克納馬拉 | zh | 1 |
| 15 | 愛茉莉 | 01.12.20 | 瓦斯科·格里馬爾迪 | 它 | 1 |
| 16 | 生活 | 28.04.20 | 維克多·杜布瓦 | FR | 3 |
| 17 | 贖罪日 | 21.02.20 | 奧里·阿澤拉德;納伊姆·印地語 | 希伯來語;ar | 2 |
| 18 | 埃萊夫瑟利亞 | 19 年 6 月 15 日 | 尼古拉斯·杰卡斯 | 克 | 1 |
該表不在 1NF 中。我想以 pd.DataFrame 的形式進行轉換,滿足 1NF。
我怎樣才能做到這一點?
我這樣做了,但似乎不起作用
import pandas as pd
import numpy as np
df = pd.read_csv("music.csv")
lens = list(map(len, df['singer','language].values))
res = pd.DataFrame({'name': np.repeat(
df['name'], lens), 'singer': np.concatenate(df['singer'].values),'language': np.concatenate(df['language'].values)})
print(res)
它應該只滿足 1NF 而不是 3NF 等等。
uj5u.com熱心網友回復:
按值拆分language并singer使用pd.explode:
df['language']=df['language'].str.split(';')
df['singer']=df['singer'].str.split(";")
df.explode(['language','singer'])
| ID | 姓名 | 日期 | 歌手 | 語 | 階段 |
|---|---|---|---|---|---|
| 1 | 是還是不是 | 02.01.20 | 本杰明·史密斯 | zh | 1 |
| 2 | 對羥基苯甲酸酯 | 01.06.21 | 拉斐爾·加爾沃 | pt | 2 |
| 2 | 對羥基苯甲酸酯 | 01.06.21 | 西蒙·墨菲 | zh | 2 |
| 3 | 愛 | 12.11.20 | 米凱拉·康德爾 | zh | 1 |
| 4 | 帕茲 | 19 年 7 月 11 日 | 安娜佩雷斯 | es | 3 |
| 4 | 帕茲 | 19 年 7 月 11 日 | 愛德華達平托 | pt | 3 |
| 5 | 停止 | 12.01.21 | 邁克爾·康威 | zh | 1 |
| 5 | 停止 | 12.01.21 | 加布里埃爾·李 | zh | 1 |
| 6 | 沙洛姆 | 21 年 6 月 18 日 | 西蒙·科恩 | 希伯來 | 1 |
| 7 | 哈比比 | 22.12.19 | 福阿德·庫里 | 阿爾 | 3 |
| 8 | 萬歲 | 01.08.21 | 維羅妮卡巴恩斯 | zh | 1 |
| 9 | 布茲南納 | 20 年 9 月 23 日 | 庫爾特·阿佐帕迪 | 公噸 | 1 |
| 10 | 弗里登 | 21.05.21 | 加布里埃爾·邁耶 | dt | 1 |
| 11 | 烏拉圭 | 11.04.21 | 胡里奧·拉米雷斯 | es | 1 |
| 12 | 美麗的 | 21 年 3 月 17 日 | 卡梅倫·阿姆斯特朗 | zh | 3 |
| 13 | 假期 | 20 年 6 月 19 日 | 比安卡·沃森 | zh | 3 |
| 14 | 獼猴桃 | 21.10.20 | 拉克蘭麥克納馬拉 | zh | 1 |
| 15 | 愛茉莉 | 01.12.20 | 瓦斯科·格里馬爾迪 | 它 | 1 |
| 16 | 生活 | 28.04.20 | 維克多·杜布瓦 | FR | 3 |
| 17 | 贖罪日 | 21.02.20 | 奧里·阿澤拉德 | 希伯來 | 2 |
| 17 | 贖罪日 | 21.02.20 | 納伊姆·印地語 | 阿爾 | 2 |
| 18 | 埃萊夫瑟利亞 | 19 年 6 月 15 日 | 尼古拉斯·杰卡斯 | 克 | 1 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/520397.html
