熊猫系列:替换空列表时的最大递归错误

时间:2018-07-19 11:41:45

标签: python pandas

我有一个包含列表的大熊猫code { font-family: "Times New Roman", Georgia, serif; } 。我想用Series替换空列表。 我的第一种方法是使用NaN,但是出乎意料的是,这给了我最大的递归错误:

.replace

我通过使用

实现了我的结果
import numpy as np
import pandas as 
ts = pd.Series([[1], [2, 3], [], [4]])
ts.replace([], np.nan)

RuntimeError: maximum recursion depth exceeded in comparison

但是有人能帮助我理解为什么ts[ts.apply(len) == 0] = np.nan 方法失败吗?

2 个答案:

答案 0 :(得分:2)

这更有效并且可以正常工作:

ts[ts.str.len() == 0] = np.nan

虽然您可能认为ts.str为您提供了字符串,但这并不是它的全部功能!当“系列”包含列表时,.str访问器仍支持切片,len()等更多内容-它们的含义与该系列包含字符串时略有不同。因此.str对于操作一系列列表非常有用。

答案 1 :(得分:2)

来自pandas文档:

Series.replace(to_replace=None, value=None,...)

to_replace : str, regex, list, dict, Series, int, float, or None

list of str, regex, or numeric:    
- First, if to_replace and value are both lists, they must be the same length.
- Second, if regex=True then all of the strings in both lists will be interpreted as regexs otherwise they will match directly. This doesn’t matter much for value since there are only a few possible substitution regexes you can use.
- str, regex and numeric rules apply as above.

Pandas会将[]的to_replace值误认为是要匹配的字符串列表,在此尝试替换其内容而不是空列表本身。这会导致错误。 (因此,在这种情况下,无论replace函数执行什么操作,它对于空列表都将不起作用-OP的代码段在我的环境中不起作用,但会收到不同的错误消息。)