相关疑难解决方法(0)

用熊猫中的NaN替换空白值(空格)

我想在Pandas数据帧中找到包含空格(任意数量)的所有值,并用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     
Run Code Online (Sandbox Code Playgroud)

进入:

                   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
Run Code Online (Sandbox Code Playgroud)

我已经设法用下面的代码来做,但是男人是丑陋的.它不是Pythonic,我敢肯定它也不是最有效的熊猫用途.我循环遍历每一列并对通过应用对每个值进行正则表达式搜索的函数生成的列掩码进行布尔替换,并在空格上进行匹配.

for i in df.columns:
    df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Run Code Online (Sandbox Code Playgroud)

只需迭代可能包含空字符串的字段,就可以对其进行优化:

if df[i].dtype == np.dtype('object')
Run Code Online (Sandbox Code Playgroud)

但这并没有太大的改善

最后,这段代码将目标字符串设置为None,它与Pandas的函数一样工作fillna(),但如果我能NaN直接插入一个而不是完整性,那么它对于完整性会很好None …

python dataframe pandas

129
推荐指数
7
解决办法
17万
查看次数

Python:从现有列创建一个新列

我正在尝试基于两列创建新列.假设我想创建一个新的列z,它应该是y的值,当它没有丢失时,并且当y确实缺失时是x的值.所以在这种情况下,我希望z是[1, 8, 10, 8].

   x   y
0  1 NaN
1  2   8
2  4  10
3  8 NaN
Run Code Online (Sandbox Code Playgroud)

python calculated-columns missing-data pandas

12
推荐指数
3
解决办法
2万
查看次数

combine_first和fillna有什么区别?

这两个功能似乎与我相同.您可以看到它们在下面的代码中实现了相同的目标,因为列c和d相等.那我什么时候应该使用另一个呢?

这是一个例子:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 10, size=(10, 2)), columns=list('ab'))
df.loc[::2, 'a'] = np.nan
Run Code Online (Sandbox Code Playgroud)

返回:

     a  b
0  NaN  4
1  2.0  6
2  NaN  8
3  0.0  4
4  NaN  4
5  0.0  8
6  NaN  7
7  2.0  2
8  NaN  9
9  7.0  2
Run Code Online (Sandbox Code Playgroud)

这是我的出发点.现在我将添加两列,一列使用combine_first,另一列使用fillna,它们将产生相同的结果:

df['c'] = df.a.combine_first(df.b)
df['d'] = df['a'].fillna(df['b'])
Run Code Online (Sandbox Code Playgroud)

返回:

     a  b    c    d
0  NaN  4  4.0  4.0
1  8.0  7  8.0  8.0
2  NaN  2  2.0 …
Run Code Online (Sandbox Code Playgroud)

python nan dataframe pandas

5
推荐指数
1
解决办法
4153
查看次数

熊猫:用两列之一的值替换Nan

给定以下数据框df,其中df['B']=df['M1']+df['M2']

   A    M1   M2   B
   1    1    2    3
   1    2    NaN  NaN
   1    3    6    9
   1    4    8    12
   1    NaN  10   NaN
   1    6    12   18
Run Code Online (Sandbox Code Playgroud)

我希望NaNin列B等于in 的相应值,M1或者M2前提是后者不是NaN

   A    M1   M2   B
   1    1    2    3
   1    2    NaN  2
   1    3    6    9
   1    4    8    12
   1    NaN  10   10
   1    6    12   18
Run Code Online (Sandbox Code Playgroud)

建议使用以下答案

df.loc[df['B'].isnull(),'B'] = df['M1'],但此行的结构允许同时考虑 …

python nan dataframe pandas

1
推荐指数
1
解决办法
2077
查看次数