在Pandas中,如何检查三个组合字符串列是否==10个字符,如果是,则插入到新列中?

2024-09-29 03:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把三个字符串列合并成一个新列,如果新列的组合字符总数等于10。你知道吗

如果不等于10,则检查下一个组合列。你知道吗

如果Phone1Area等于3个字符串字符,Phone1Prefix等于3个字符串字符,Phone1NumberPart等于4个字符串字符,换句话说,总共10个字符,我尝试将这些列添加到一个新列中。我试过添加3+3+4个字符的列,测向位置,还有更多的事情。你知道吗

以下是数据集示例:

Dataset

代码如下:

dfp['p1'] = df[(df['Phone1Area'].str.len() == 3.0)]['Phone1Area'] + 
df[(df['Phone1Exchange'].str.len() == 3.0)]['Phone1Exchange'] + 
df[(df['Phone1NumberPart'].str.len() == 4.0)]['Phone1NumberPart']


dfp['p2'] = df[(df['Phone2Area'].str.len() == 3.0)]['Phone2Area'] + 
df[(df['Phone2Exchange'].str.len() == 3.0)]['Phone2Exchange'] + 
df[(df['Phone2NumberPart'].str.len() == 4.0)]['Phone2NumberPart']

df_phone.loc[df_phone['p1'].str.len() == 10, 'phone'] = df_phone['p1']
df_phone.loc[df_phone['p2'].str.len() == 10, 'phone'] = df_phone['p2']

以下是我想要它做的,但是在熊猫身上:

if df_phone['p1'].str.len() == 10:
    then insert df_phone['p1'] into df_phone['phone']
elif df_phone['p2'].str.len() == 10:
    then insert df_phone['p2'] into df_phone['phone']
elif df_phone['p3'].str.len() == 10:
    then insert df_phone['p3'] into df_phone['phone']

我希望phone列包含phone1的10个字符,如果不是10个字符,那么phone列包含phone2的10个字符,以此类推

但其中一个结果是:

AttributeError: 'DataFrame' object has no attribute 'str'

你知道怎么解决吗?你知道吗


Tags: 字符串dflenphone字符insertp2then
2条回答

另一个使用np.select的解决方案应该更快:

conditions = [df_phone['p1'].str.len() == 10, df_phone['p2'].str.len() == 10,\
              df_phone['p3'].str.len() == 10]
choices = [df_phone['p1'], df_phone['p2'], df_phone['p3']]

df_phone['phone'] = np.select(conditions, choices, default = '')

Documentation:

  • np.select: pick the choice for the first True value encountered in conditions. If only False, fill with default.

这将有助于:

df['phone'] = ''
df['test_phone'] = df['phone1Area'] + df['phone1Exchange'] + df['phone1NumberPart']
df['phone'][df['test_phone'].str.len() == 10] = df['test_phone']
df['test_phone'] = df['phone2Area'] + df['phone2Exchange'] + df['phone2NumberPart']
df['phone'][(df['test_phone'].str.len() == 10) & (df['phone'] == '')] = df['test_phone']
df['test_phone'] = df['phone3Area'] + df['phone3Exchange'] + df['phone3NumberPart']
df['phone'][(df['test_phone'].str.len() == 10) & (df['phone'] == '')] = df['test_phone']
etc.

相关问题 更多 >