首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何仅使用notnull vaues在熊猫dataframe新列中创建新的派生列

如何仅使用notnull vaues在熊猫dataframe新列中创建新的派生列
EN

Stack Overflow用户
提问于 2015-05-11 03:14:43
回答 2查看 1.6K关注 0票数 0

通常,我希望将一个函数映射到包含空的列,而我发现我自己不得不编写一些关于空值的逻辑检查。例如:

代码语言:javascript
运行
复制
In [656]:
import pandas as pd
import numpy as np
df= pd.DataFrame(['Apple Pear',np.nan,'Orange Banana'], columns = ['fruits'])
df['first_fruit'] = df.fruits.map(lambda x: (type(x) != float and min(x.split())) or np.nan)
df
Out[656]: 
          fruits first_fruit
0     Apple Pear       Apple
1            NaN         NaN
2  Orange Banana      Banana

这种事我总觉得有点笨重。是否有更好的方法将函数应用于列的非空行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-11 03:29:55

使用isnull非零方法筛选出列的非空元素。

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np
df= pd.DataFrame(['Apple Pear',np.nan,'Orange Banana'], columns = ['fruits'])
df['first_fruit'] = df.fruits[~df.fruits.isnull()].apply(lambda x: x.split()[0])
# or: df['first_fruit'] = df.fruits[df.fruits.notnull()].apply(lambda x: x.split()[0])

这将创建一个新的first_fruit列,并将其填充为空(np.nan),其中fruits为null (np.nan)

代码语言:javascript
运行
复制
          fruits first_fruit
0     Apple Pear       Apple
1            NaN         NaN
2  Orange Banana      Orange

在这种情况下,我不认为type(x) != float是一个很好的成语(因为python是动态类型的,您不应该需要验证函数的输入类型),它实际上也不适用于熊猫数据框架中的浮动列。

例如:

代码语言:javascript
运行
复制
df['prices'] = [1.0, np.nan, 2.0]
df.prices.apply(lambda x: type(x) == float)

印出

代码语言:javascript
运行
复制
0    False
1    False
2    False
Name: prices, dtype: bool

如果必须检查参数类型,请使用isinstance

代码语言:javascript
运行
复制
df.prices.apply(lambda x: isinstance(x, float))

印出

代码语言:javascript
运行
复制
0    True
1    True
2    True
Name: prices, dtype: bool
票数 1
EN

Stack Overflow用户

发布于 2015-05-11 11:53:20

使用locnotnull掩蔽df和向量化的str方法以对字符串进行split

代码语言:javascript
运行
复制
In [34]:

df= pd.DataFrame(['Apple Pear',np.nan,'Orange Banana'], columns = ['fruits'])
df['first_fruit'] = df.loc[df['fruits'].notnull(),'fruits'].str.split().str[0]
df
Out[34]:
          fruits first_fruit
0     Apple Pear       Apple
1            NaN         NaN
2  Orange Banana      Orange
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30159133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档