结构拆分在函数using中使用时元素不存在

2024-10-06 17:31:31 发布

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

东风5

award_id_fain    award_id_uri    loan_no
1234                             1234
                 12345678:4      12345678

我使用一个函数来捕获字符串中位于字符前面的部分。我有一个df,它的“award\u id\u uri”列是target值。给定12345678:4,我希望输出为12345678。我想我已经记下了语法,但是我得到了一个

"'str' object has no attribute 'str'"

错误消息。你知道吗

我目前的方法是声明一个函数,然后应用它。函数和调用如下。你知道吗

def loan_cap(row):
    if pd.notnull(row['award_id_fain']):
        loan_no = row['award_id_fain']
    else: loan_no = row['award_id_uri'].str.split(':').str[0]
    return loan_no


df5['loan_no'] = df5.apply(loan_cap, axis = 1)

我认为错误在于函数的str[0]部分。事先谢谢你的帮助。你知道吗


Tags: 函数no字符串id错误uri字符row
3条回答

就这样吧。你知道吗

def loan_cap(row):
    if row['award_id_fain']:
        return row['award_id_fain']
    else: 
        return row['award_id_uri'].split(':')[0]

df5['loan_no'] = df5.apply(loan_cap, axis = 1)

如其他注释所述,行[“award\u id\u uri”]将返回一个值,在您的情况下是一个字符串,因此您可以直接对其应用split函数。你知道吗

如果行['award\u id\u uri']不包含“:”则添加try/except块。你知道吗

我想你不需要这里的.str部分。它说它已经知道,它是str。你知道吗

尝试:

def loan_cap(row):
    if pd.notnull(row['award_id_fain']):
        loan_no = row['award_id_fain']
    else: loan_no = row['award_id_uri'].split(':').str[0]
    return loan_no

避免apply如果可能的话,试着从整个系列的角度来思考,而不是逐行思考。在这种情况下,可以使用fillna()

df['loan_no'] = df.award_id_fain.fillna(df.award_id_uri.str.split(':', expand=True)[0])

输出:

   award_id_fain award_id_uri   loan_no
0         1234.0          NaN      1234
1            NaN   12345678:4  12345678

相关问题 更多 >