第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何合并一列列表,提取唯一的字符串值,放入數(shù)據(jù)框

如何合并一列列表,提取唯一的字符串值,放入數(shù)據(jù)框

守候你守候我 2022-05-19 14:33:45
瘋了,想不出哪里錯了。有一個帶有數(shù)據(jù)框的文件,由單列組成,每行由 1 個列表組成我迷路了,請指教fruits0   ['apple', 'orange','grape']1   ['apple','pineapple','coconut']#預期的@fruit0   apple1   coconut2   grape3   orange4   pineapple
查看完整描述

2 回答

?
慕的地6264312

TA貢獻1817條經(jīng)驗 獲得超6個贊

首先將您的列表展平data為一個列表,然后將其作為 DataFrame 中的列讀?。?/p>


>>> data = [[['apple', 'orange','grape']],[['apple','pineapple','coconut']]]

>>> data = np.unique(np.ravel(data))

>>> df = pd.DataFrame(data, columns = ['fruit'])

>>> df

       fruit

0      apple

1    coconut

2      grape

3     orange

4  pineapple

編輯新案例

嗨喬納森,我回復了你的電子郵件,如果你的列值是“喜歡”列表,你應該如何處理這些條目。你需要使用ast.literal_eval()它。


>>> df = pd.DataFrame({'fruits': ['[\'apple\', \'orange\',\'grape\']','[\'apple\',\'pineapple\',\'coconut\']']})

>>> df

                            fruits

0      ['apple', 'orange','grape']

1  ['apple','pineapple','coconut']

但是,這樣做,您必須遍歷該列,將列表的每個轉換表示形式放入 adummy_list中,以將所有內容收集到一個列表中并在其中執(zhí)行您想做的事情。


>>> import ast

>>> dummy_list = []

>>> for i in range(0, len(df)):

...     dummy_list.extend(ast.literal_eval(df['fruits'][i]))

...

>>> dummy_list

['apple', 'orange', 'grape', 'apple', 'pineapple', 'coconut']

獲取唯一值并創(chuàng)建所需的 DataFrame:


>>> x = list(set(dummy_list))

>>> x

['orange', 'apple', 'grape', 'coconut', 'pineapple']

>>> df2 = pd.DataFrame(x, columns = ['fruits 2.0'])

>>> df2

  fruits 2.0

0     orange

1      apple

2      grape

3    coconut

4  pineapple


查看完整回答
反對 回復 2022-05-19
?
森林海

TA貢獻2011條經(jīng)驗 獲得超2個贊

僅np.ravel(正如Anky提出的那樣)是不夠的。然后,您需要刪除重復項。如果你對非連續(xù)索引不滿意,你可以自由地重置它。


所以完整的代碼可以是:


df = pd.DataFrame(np.ravel(data),columns=['fruit'])\

    .drop_duplicates().reset_index(drop=True)

np.unique(如在另一個答案中)有一個缺點,它對 源數(shù)組進行排序。我想你想保持原來的順序。


發(fā)表評論后編輯

看起來您實際上有一個DataFrame,使用read_excel()讀取,如下所示:


                        fruits

0       [apple, orange, grape]

1  [apple, pineapple, coconut]

(不是您帖子中提供的列表)。


要將這樣的 DataFrame 轉換為單個平面列表,您可以運行:


lst = df['fruits'].apply(pd.Series).stack().drop_duplicates().to_list()

它在“普通”(pythonic)列表中。


要創(chuàng)建具有單列的第二個 DataFrame,請運行:


df2 = pd.DataFrame(lst, columns=['fruits'])

另一種選擇,無需創(chuàng)建中間列表:


df['fruits'].apply(pd.Series).stack().rename('fruits')\

    .drop_duplicates().reset_index(drop=True).to_frame()

編輯 2

我找到了一個更簡單的解決方案,考慮到read_excel 默認將所有單元格讀取為strings。


成功的關鍵是str.extractall方法,應用于fruits列。要提取撇號之間的文本,正則表達式應該是:


'(?P<fruits>[^']+)'

細節(jié):


'- 在要匹配的文本之前的撇號(代表自身)。

(?P<fruits>- 命名捕獲組的開始(也稱為fruits)。

[^']+- 該組的內容 - 除撇號外的非空字符序列。

)- 捕獲組結束。

'- 另一個撇號,在要匹配的文本之后。

因此,如果您運行:


df.fruits.str.extractall(r"'(?P<fruits>[^']+)'")

你會得到:


            fruits

  match           

0 0          apple

  1         orange

  2          grape

1 0          apple

  1      pineapple

  2        coconut

該結果包含:


多索引:

頂級 - 源行的索引(沒有名稱),

第二級 - 匹配編號(每行 0、1 和 2)。

fruits - 連續(xù)行中帶有單個字符串的捕獲組的名稱。

現(xiàn)在只剩下刪除重復項和重置索引了。


所以完整的代碼,一條指令是:


df.fruits.str.extractall("'(?P<fruits>[^']+)'")\

    .drop_duplicates().reset_index(drop=True)

結果是:


      fruits

0      apple

1     orange

2      grape

3  pineapple

4    coconut


查看完整回答
反對 回復 2022-05-19
  • 2 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號