Pandas 根据条件从数据框中提取值

Pandas extracting values from dataframe based on condition

我正在尝试提取 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 条件和带有 lambda 的 apply() 函数,但有相同的例外:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

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

提前感谢您的帮助!

您可以简单地使用 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