【问题标题】:find first non-null & non-empty string value查找第一个非空和非空字符串值
【发布时间】:2021-12-03 11:56:48
【问题描述】:

我正在使用它来查找字符串的第一个非空值:

def get_first_non_null_values(df):
    first_non_null_values = []
    try:
        kst = df['kst'].loc[df['kst'].first_valid_index()]
        first_non_null_values.append(kst)
    except:
        kst = df['kst22'].loc[df['kst22'].first_valid_index()]
        first_non_null_values.append(kst)
    return first_non_null_values


first_non_null_values = get_first_non_null_values(df_merged)

这可行,但现在在我的新数据集中,我有一些空值和一些 "" 空字符串。如何修改它以便我可以提取第一个既不是 null 也不是空字符串的值

【问题讨论】:

  • 为什么不先尝试将空字符串转换为 np.nan 呢?
  • 请举例说明您将如何使用此功能。顺便说一句,expect 块中的代码没有任何用处,因为您不使用/返回输出

标签: python pandas string dataframe try-catch


【解决方案1】:

我认为你需要:

df = pd.DataFrame({'col': ['', np.nan, '', 1, 2, 3]})
print(df['col'].loc[df['col'].replace('', np.nan).first_valid_index()])

【讨论】:

    【解决方案2】:

    您可以使用notnull/astype(bool)idxmax 的组合:

    (df['col'].notnull()&df['col'].astype(bool)).idxmax()
    

    示例输入:

    >>> df = pd.DataFrame({'col': ['', float('nan'), False, None, 0, 'A', 3]})
    >>> df
         col
    0       
    1    NaN
    2  False
    3   None
    4      0
    5      A
    6      3
    

    输出:5

    null 和真实状态:

         col  notnull  astype(bool)   both
    0            True         False  False
    1    NaN    False          True  False
    2  False     True         False  False
    3   None    False         False  False
    4      0     True         False  False
    5      A     True          True   True
    6      3     True          True   True
    

    第一个非空字符串值:

    如果你只对非空字符串感兴趣:

    df['col'].str.len().gt(0).idxmax()
    

    【讨论】:

    • 你能看到更新的qs吗?我需要从函数返回值。你的 sol 不是返回 ID 吗?
    • 你能给出一个示例输入数据框和预期的输出吗?
    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2013-04-29
    • 1970-01-01
    • 2021-06-16
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多