我想找到熊猫数据框中包含空白(任意数量)的所有值,并用NaN替换这些值。
有什么想法可以改进吗?
基本上,我想把这个转变为:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
为此:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
我已经设法做到了下面的代码,但人是丑陋的。这不是蟒蛇,我肯定这也不是对熊猫最有效的利用。我循环遍历每一列,并对应用一个函数生成的列掩码进行布尔替换,该函数对每个值进行正则表达式搜索,并在空格上进行匹配。
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
只需遍历可能包含空字符串的字段,即可对其进行一点优化:
if df[i].dtype == np.dtype('object')
但这算不上什么进步
最后,这段代码将目标字符串设置为无,这适用于Pandas的函数,如fillna()
,但是如果我可以直接插入NaN
而不是无
,这将是完整的。
怎么样:
d = d.applymap(lambda x: np.nan if isinstance(x, basestring) and x.isspace() else x)
applymap
函数将函数应用于数据帧的每个单元格。
如果你想用空格替换空字符串和记录,正确答案是!:
df = df.replace(r'^\s*$', np.nan, regex=True)
公认的答案
df.replace(r'\s+', np.nan, regex=True)
不替换空字符串!,您可以尝试使用稍微更新的给定示例:
df = pd.DataFrame([
[-0.532681, 'foo', 0],
[1.490752, 'bar', 1],
[-1.387326, 'fo o', 2],
[0.814772, 'baz', ' '],
[-0.222552, ' ', 4],
[-1.176781, 'qux', ''],
], columns='A B C'.split(), index=pd.date_range('2000-01-01','2000-01-06'))
请注意,“fo o”虽然包含空格,但并未替换为Nan。进一步注意,一个简单的方法是:
df.replace(r'', np.NaN)
也不起作用-试试看。
我认为df.replace()
起作用,因为熊猫0.13:
df = pd.DataFrame([
[-0.532681, 'foo', 0],
[1.490752, 'bar', 1],
[-1.387326, 'foo', 2],
[0.814772, 'baz', ' '],
[-0.222552, ' ', 4],
[-1.176781, 'qux', ' '],
], columns='A B C'.split(), index=pd.date_range('2000-01-01','2000-01-06'))
# replace field that's entirely space (or empty) with NaN
print(df.replace(r'^\s*$', np.nan, regex=True))
生产:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
正如Temak所指出的,使用df.replace(r'^\s$',np.nan,regex=True)
,以防您的有效数据包含空白。
我想找到熊猫数据框中包含空白(任意数量)的所有值,并用NaN替换这些值。 有什么想法可以改进吗? 基本上,我想把这个转变为: 为此: 我已经设法做到了下面的代码,但人是丑陋的。这不是蟒蛇,我肯定这也不是对熊猫最有效的利用。我循环遍历每一列,并对应用一个函数生成的列掩码进行布尔替换,该函数对每个值进行正则表达式搜索,并在空格上进行匹配。 只需遍历可能包含空字符串的字段,即可对其进行一点优化: 但这算
问题内容: 我有一个Pandas Dataframe,如下所示: 我想用一个空字符串删除NaN值,使其看起来像这样: 问题答案: 这可能会有所帮助。它将用空字符串替换所有NaN。
我有一个空单元格的数据框,并希望用NaN替换这些空单元格。之前在这个论坛上提出的解决方案有效,但前提是单元格包含一个空间: 当单元格为空时,此代码不起作用。有人建议用熊猫代码来代替空细胞吗?
我有一个数据框,如下所示: 我想用一个空字符串删除NaN值,这样看起来像这样:
问题内容: 我正在尝试学习熊猫,但请对以下内容感到困惑。我想用行平均值替换NaN是一个数据框。因此,类似的东西应该可以工作,但是由于某种原因,它对我来说是失败的。我是否想念任何东西,我做错了什么?是因为其未执行; 但是这样的事情看起来很好 问题答案: 如评论所述,fillna的axis参数为NotImplemented。 注意:这在这里很重要,因为您不想用第n行平均值填写第n列。 现在,您需要遍历
2020-02-29 20:20:15,548错误O.A.J.E.JSR223PostProcessor:JSR223脚本中的问题,RESPONSE_STORE javax.script.scriptexception:groovy.lang.missingmethodException:org.codehaus.groovy.JSR223.groovyscriptengineimpl.$()方法