我在数据框中有以下一列:
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
有没有自动的方法可以做到这一点?
答案 0 :(得分:2)
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
向其传递函数:
s.str.split(',').transform(function)
其中function = lambda x: {k:k for k in x}
。因此,基本上,我们将对输入func
运行此[en-us, en-en]
,然后对[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
s