繁体   English   中英

使用大熊猫时不保留任何值

[英]Preserve None values when using pandas apply

我有一个需要添加列c3的数据框。 该列中的每个条目都取决于其他两列c1c2同一行的条目。 c3最初是通过将函数映射到c1c2成对条目来创建的。 我试图通过使用apply加快c3的创建,因为有很多数据。 这是我现在所拥有的:

frame['c3'] = frame.apply(lambda x: my_func(x[c1], x[c2],
                          extra_arg1, extra_arg2), axis=1). 

但是,当我这样做时,'c3'变成float64 ,而我需要它成为object类型以保留我需要进一步处理数据帧的None值(而不是将它们转换为NaN给定的代码行,因为该函数生成的其他值的类型为int 我知道一个可以使用astype更改列的类型,但是使用它已经创建的列不工作- NaN值保持为NaN值。 有什么办法告诉apply我想保留None值? 我需要在lambda表达式中还是在my_func做一些特殊的my_func吗?

熊猫(至少在18.0版中)具有

convert_dtype:布尔值,默认为True

尝试找到更好的dtype以获得逐元素函数结果。 如果为False,则保留为dtype = object

a=pd.Series(['1','2','3',None])
a.apply(lambda x: int(x) if x is not None else None,convert_dtype=False)

Out[101]: 

0       1
1       2
2       3
3    None
dtype: object

地图功能没有类似的功能

您的apply函数很奇怪,因为您没有使用x ,而是在每一行上提取了数据框的两整列。

我建议您使用NaN,然后​​将其转换为None:

frame['c3'] = frame.apply(lambda row: my_func(row[c1], row[c2],
                      extra_arg1, extra_arg2), axis=1)

frame['c3'] = frame['c3'].where((pd.notnull(frame['c3'])), None)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM