![](/img/trans.png)
[英]pandas column containing list of objects, split this column based upon keynames and store values as comma separated values
[英]Split column in pandas of comma separated values but maintining the order
我在數據框中有以下列:
column_1
en-us,en-en
pr,en-us,en-en,br
ar-ar,pr,en-en
我想拆分該列(可以通過.str.split完成),但是使用.Split,我將得到:
column_1 | column_2 | column_3 | column_4
en-us en-en
pr en-us en-en br
ar-ar pr en-en
我需要的是:
column_1 | column_2 | column_3 | column_4
en-us en-en
en-us en-en br pr
ar-ar en-en pr
有自動的方法嗎?
IIUC,您可以通過將字典列表傳遞給默認的pd.DataFrame
構造函數來完成。 例如,
df = pd.DataFrame(s.str.split(',').transform(lambda x: {k:k for k in x}).tolist())
產量
r-ar br en-en en-us pr
0 NaN NaN en-en en-us NaN
1 NaN br en-en en-us pr
2 ar-ar NaN en-en NaN pr
請注意,根據您的需求重新排列數據框很簡單,例如
>>> df[['en-en', 'en-us', 'br', 'pr']]
en-en en-us br pr
0 en-en en-us NaN NaN
1 en-en en-us br pr
2 en-en NaN NaN pr
如果要使用空字符串而不是NaN
,則只需使用.fillna()
df[['en-en', 'en-us', 'br', 'pr']].fillna('')
en-en en-us br pr
0 en-en en-us
1 en-en en-us br pr
2 en-en pr
說明
讓我們分解以下語句
s.str.split(',').transform(lambda x: {k:k for k in x}).tolist()
首先, s.str.split(',')
做您已經知道的事情:使用,
作為分隔符進行拆分。 這產生了以下系列
0 [en-us, en-en]
1 [pr, en-us, en-en, br]
2 [ar-ar, pr, en-en]
Name: col1, dtype: object
現在,我們想將每個元素更改為{key:value}
結構。 為此,我們使用transform
函數傳遞給它的transform
:
s.str.split(',').transform(function)
其中function = lambda x: {k:k for k in x}
。 因此,基本上,我們將針對輸入[en-us, en-en]
運行func
,然后針對[pr, en-us, en-en, br]
等運行此函數。此函數的輸出為
0 {'en-en': 'en-en', 'en-us': 'en-us'}
1 {'br': 'br', 'en-en': 'en-en', 'en-us': 'en-us...
2 {'en-en': 'en-en', 'ar-ar': 'ar-ar', 'pr': 'pr'}
現在,我們僅使用tolist()
獲取這些值的列表,並將其輸入到pd.DataFrame()
構造函數中。 構造函數知道如何很好地處理字典列表,並且它基於字典的keys
為每一行分配值。 每當找不到行的鍵/值時,它僅使用NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.