我有一个数据框中的列列表,不应该为空。
我想删除任何这些列中为空的行。我的解决方案是迭代所需的列并设置列“排除”'在排除用户之前将显示用户的错误消息(我将在流程结束时以报告的形式向用户显示这些消息)
我目前正在尝试这样的事情:
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')
答案 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.any
或np.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