【发布时间】: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