我有一个包含以下内容的数据框列:
Audience
searchretargeting
data-capture-320x50
purchase-behavior-320x500
data-capture-728x90
我想通过基于'-'分隔符拆分'Audience'列来创建一个新列(Audience2),理想情况下只希望保留拆分的第一个元素('data'而不是'capture- 320x50')
如果不存在“-”,我希望在新列中填充“受众群体”中的内容(例如searchretargeting):
Audience Audience2
siteretargeting siteretargeting
data-capture-320x50 data
我知道如何对“受众群体”列进行拆分,但是当列中不存在“-”时,我希望添加某种逻辑来绕开新列NaN。
df['Audience2']=df['Audience'].str.split('-').str[1]
这拆分了Audience列,仅保留了第一个元素,但是我一直在努力处理各种if-else和apply-lambda语句,以弄清楚如何提取没有'-'的数据而不将其作为NaN
答案 0 :(得分:3)
尝试一下:
df['Audience'].str.split('-').str[0].fillna(df['Audience'])
输出:
0 searchretargeting
1 data
2 purchase
3 data
Name: Audience, dtype: object
答案 1 :(得分:2)
让我们来修复ffill
df.Audience.str.split('-',expand=True).ffill(axis=1).iloc[:,1]
0 searchretargeting
1 capture
2 behavior
3 capture
Name: 1, dtype: object
更多信息
df.Audience.str.split('-',expand=True).ffill(axis=1)
0 1 2
0 searchretargeting searchretargeting searchretargeting
1 data capture 320x50
2 purchase behavior 320x500
3 data capture 728x90
答案 2 :(得分:1)
df['audience2'] = [i.split('-')[0] for i in df.audience if '-' in i else i]
这应该为你做。
答案 3 :(得分:1)
您可以尝试使用np.where
:
df['Audience2']=np.where(df.Audience.str.contains('-'), df.Audience.str.split('-').str[0],df.Audience)
输出:
df
Audience Audience2
0 searchretargeting searchretargeting
1 data-capture-320x50 data
2 purchase-behavior-320x500 purchase
3 data-capture-728x90 data
答案 4 :(得分:1)
您可以改用这样的东西-
df['Audience2']=df['Audience'].str.split('-').str[1]
for i in range(len(df)):
if pd.isna(df['Audience2'][i]):
df['Audience2'][i] = df['Audience'][i]