【问题标题】:Pandas extracting values from dataframe based on condition熊猫根据条件从数据框中提取值
【发布时间】:2022-01-06 22:32:14
【问题描述】:

我正在尝试在 pandas df 数据框中的某些行中的短划线之前提取部分字符串。问题是,当我使用 extract() 函数时,它会在破折号之前提取字符串的一部分,但在没有破折号的行中插入 NaN 值。

数据示例:

I2311-A45
Z13A-SA87 
CSSSAA1-4 
LKJ3B-15
1AAAZ0-14
ASHENSKFR
ASD
AFSDFGRE

所以我有 df['values'] 示例列在哪里。我的尝试是:

df['values'] = df['values'].str.extract('(.*)-')

输出:

I2311
Z13A 
CSSSAA1 
LKJ3B
1AAAZ0
NaN
NaN
NaN

它给了我 3 个 NaN 值而不是

ASHENSKFR
ASD
AFSDFGRE

接下来我尝试使用 df.loc 条件和 apply() 函数和 lambda,但有同样的例外:

Series 的真值是模棱两可的。使用 a.empty、a.bool()、 a.item()、a.any() 或 a.all()。

df['values'] = df['values'].apply(lambda x: df['values'].str.extract('(.*)-') if df['values'].str.contains('-') else None)

提前感谢您的帮助!

【问题讨论】:

    标签: python pandas dataframe lambda


    【解决方案1】:

    您可以简单地使用Series.str.split。这将拆分存在- 的值,否则将保持原样。

    In [134]: df['values'].str.split('-').str[0]
    Out[134]: 
    0        I2311
    1         Z13A
    2      CSSSAA1
    3        LKJ3B
    4       1AAAZ0
    5    ASHENSKFR
    6          ASD
    7     AFSDFGRE
    Name: values, dtype: object
    

    【讨论】:

    • 见鬼,我没想到啊哈哈谢谢你的回复!
    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 2019-03-24
    • 2016-08-09
    相关资源
    最近更新 更多