我有一個包含 5 列的 Pandas 資料框:
ID Title Sponsor name Date Comparator
0 [NT0235] [bla bla bla] [sponsor name1] 2021-08-13 [comparator1]
1 [NT0236] [bla bla bla] [sponsor name2] 2021-08-12 [comparator2]
2 [NT0237] [bla bla bla] [sponsor name3] 2021-08-11 [comparator3]
3 [NT0238] [bla bla bla] [sponsor name4] 2021-08-10 [comparator4]
4 [NT0239] [bla bla bla] [sponsor name5] 2021-08-09 [comparator5]
我需要從列中洗掉串列:ID、標題、贊助商名稱和比較器,因為它們都是單個元素串列(如果不是,可以使用空格作為分隔符連接元素)。我該怎么做呢?謝謝!
這是 df:
import pandas as pd
data = {'ID': [['NT0235'],['NT0236'],['NT0237'],['NT0238'],['NT0239']],'Title': [['bla bla bla'] , ['bla bla bla'] , ['bla bla bla'], ['bla bla bla'] , ['bla bla bla']] , 'Sponsor name': [['sponsor name1'], ['sponsor name2'], ['sponsor name3'], ['sponsor name4'], ['sponsor name5']], 'Date': ['2021-08-13','2021-08-12','2021-08-11','2021-08-10','2021-08-09'], 'Comparator': [['comparator1'], ['comparator2'], ['comparator3'], ['comparator4'], ['comparator5']]
}
df = pd.DataFrame(data)
我需要的是這個 df:
ID Title Sponsor name Date Comparator
0 NT0235 bla bla bla sponsor name1 2021-08-13 comparator1
1 NT0236 bla bla bla sponsor name2 2021-08-12 comparator2
2 NT0237 bla bla bla sponsor name3 2021-08-11 comparator3
3 NT0238 bla bla bla sponsor name4 2021-08-10 comparator4
4 NT0239 bla bla bla sponsor name5 2021-08-09 comparator5
uj5u.com熱心網友回復:
用:
df[['ID', 'Title', 'Sponsor name', 'Comparator']] = df[['ID', 'Title', 'Sponsor name', 'Comparator']].apply(lambda x: x.explode())
輸出:
ID Title Sponsor name Date Comparator
0 NT0235 bla bla bla sponsor name1 2021-08-13 comparator1
1 NT0236 bla bla bla sponsor name2 2021-08-12 comparator2
2 NT0237 bla bla bla sponsor name3 2021-08-11 comparator3
3 NT0238 bla bla bla sponsor name4 2021-08-10 comparator4
4 NT0239 bla bla bla sponsor name5 2021-08-09 comparator5
uj5u.com熱心網友回復:
對于這種簡單的情況,您可以使用DataFrame.apply()應用pd.Series.explode在每一列上,如下所示:
df = df.apply(pd.Series.explode)
結果:
print(df)
ID Title Sponsor name date comparator
0 NT0235 bla bla bla sponsor name1 2021-08-13 comparator1
1 NT0236 bla bla bla sponsor name2 2021-08-12 comparator2
2 NT0237 bla bla bla sponsor name3 2021-08-11 comparator3
3 NT0238 bla bla bla sponsor name4 2021-08-10 comparator4
4 NT0239 bla bla bla sponsor name5 2021-08-09 comparator5
如果您只想應用于選定的列,您可以使用:
df[['ID', 'Title', 'Sponsor name', 'Comparator']] = df[['ID', 'Title', 'Sponsor name', 'Comparator']].apply(pd.Series.explode)
uj5u.com熱心網友回復:
如果有lists(和里面的字串),您可以通過空格連接值- 它適用于一個元素和多個元素串列:
df = df.applymap(lambda x: ' '.join(x) if isinstance(x, list) else x)
如果可能,一些數值:
df = df.applymap(lambda x: ' '.join(map(str, x)) if isinstance(x, list) else x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322290.html
上一篇:創建一個包含亂數的串列。詢問用戶并檢查號碼是否在所需范圍內
下一篇:使用Linq根據條件過濾物件串列
