我有一个包含列表的大熊猫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
方法失败吗?
答案 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的代码段在我的环境中不起作用,但会收到不同的错误消息。)