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
我正在尝试提取 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