gpt4 book ai didi

python - 使用 Pandas apply 过滤掉空 DataFrame 单元格的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:50 24 4
gpt4 key购买 nike

我正在使用 apply 方法将数据从 Pandas DataFrame 发送到函数。如果单元格为空,则对象类型为“NoneType”或“float”,这与我的函数执行的字符串比较不兼容。我使用以下方法过滤掉这些数据:

if isinstance(col1,str): #to make sure the data is a string.

我的问题是是否有更好的方法来做到这一点,因为这违背了鸭子类型的概念?

对于上下文,这是我的代码:

def check_cols(col1,col2):
if isinstance(col1,str):
var = col1
else:
var = col2
#the logical part of the function is here

#passing in data from two columns
dfcat['col3'] = dfcat.apply(lambda x: check_cols(x['col1'],x['col2']),axis=1)

最佳答案

我认为你可以使用combine_first如果需要替换 NoneNaN:

dfcat['col3'] = dfcat['col1'].combine_first(dfcat['col2'])

但是如果需要替换非字符串,请使用 mask使用 bool 掩码:

mask = dfcat['col1'].apply(lambda x: isinstance(x,str))
dfcat['col3'] = dfcat['col2'].mask(mask, dfcat['col1'])

示例:

dfcat = pd.DataFrame({'col1':[np.nan, 'aa', None, 10, 12.7], 'col2':['e','r','t','k', 'g']})
print (dfcat)
col1 col2
0 NaN e
1 aa r
2 None t
3 10 k
4 12.7 g

mask = dfcat['col1'].apply(lambda x: isinstance(x,str))
dfcat['col3'] = dfcat['col2'].mask(mask, dfcat['col1'])
print (dfcat)
col1 col2 col3
0 NaN e e
1 aa r aa
2 None t t
3 10 k k
4 12.7 g g

关于python - 使用 Pandas apply 过滤掉空 DataFrame 单元格的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43474264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com