![](/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.