更新熊猫中的等效物

时间:2018-03-23 20:58:50

标签: python sql pandas dataframe

我有一个数据框中的列列表,不应该为空。

我想删除任何这些列中为空的行。我的解决方案是迭代所需的列并设置列“排除”'在排除用户之前将显示用户的错误消息(我将在流程结束时以报告的形式向用户显示这些消息)

我目前正在尝试这样的事情:

nil

但没有运气 - 列没有更新。过滤器本身(仅获取空行)有效,更新部分似乎无法正常工作。

我习惯了SQL:

for col in requiredColumns:
    df[pd.isnull(df[col])]['excluded'] = df[pd.isnull(df[col])]['excluded'].apply(lambda x: str(x) + col + ' empty, excluded')

2 个答案:

答案 0 :(得分:1)

一种方法是使用numpy函数创建具有所需标记的列。

<强>设置

import pandas as pd, numpy as np

df = pd.DataFrame({'A': [1, np.nan, 2, 3, 4, 5],
                   'B': [2, 3, np.nan, 5, 1, 9],
                   'C': [5, 8, 1, 9, np.nan, 7]})

     A    B    C
0  1.0  2.0  5.0
1  NaN  3.0  8.0
2  2.0  NaN  1.0
3  3.0  5.0  9.0
4  4.0  1.0  NaN
5  5.0  9.0  7.0

<强>解决方案

df['test'] = np.any(np.isnan(df.values), axis=1)

     A    B    C   test
0  1.0  2.0  5.0  False
1  NaN  3.0  8.0   True
2  2.0  NaN  1.0   True
3  3.0  5.0  9.0  False
4  4.0  1.0  NaN   True
5  5.0  9.0  7.0  False

<强>解释

  • np.isnan返回一个布尔数组,对应于numpy数组的元素是否为空。
  • 根据需要使用np.anynp.all来确定哪些行在范围内。
  • 使用df.values从数据框中提取基础numpy数组。对于选定的列,您可以使用df[['A', 'B']].values

答案 1 :(得分:0)

如果您需要基于多种条件更新熊猫:

您可以简单地使用.loc

>>> df
      A   B    C
0     2  40  800
1     1  90  600
2     6  80  700
3  1998  70   55
4     1  90  300
5     7  80  700
6     4  20  300
7  1998  20    2
8     7  10  100
9  1998  60    2

>>> df.loc[(df['A'] > 7) & (df['B'] > 69) , 'C'] = 75

这将设置'C'= 75,其中'A'> 7和'B'> 69