2017-08-04 72 views
2

我已经阅读了20多个线程,并且仍然空着(没有双关语意图)。无法评估列的空值

我有一个熊猫数据框df_s,它有一个包含iloc [:,8]日期的列。我试图根据是否在另一列中有值来为数据框添加一个新列(值为yes/no)。

这是我一直在努力:

CDRFormUp = [] 
for row in df_s.iloc[:,8]: 
    if row=="": 
      CDRFormUp.append('No') 
    else: 
      CDRFormUp.append('Yes') 
df_s['CDR Form Up'] = CDRFormUp 

CDRFormUp将是新列。我正在运行数据框中的每一行,并检查列中的值是否为任何值。

我已经试过......

if row <>"": 
if row == "": 
if row is None: 
if row: 
if row>0: 

没有什么工作。该列包含日期和空单元格和文本。例如,第一行这一列的值是“CDF Form”,第二行是空白的,第三行是“4865”或类似的东西。

如果我将iloc设置为仅包含国家/地区名称的不同列,并将条件设置为“Country =”意大利“,它会正确地为每行的新列添加”是“或”否“。 ..所以它不是一个错误ILOC或别的东西

任何帮助将是令人难以置信的赞赏 感谢

+0

毫无'<>'操作者在Python。也许你的意思是'!='? – SwiftsNamesake

回答

1

您需要使用np.where与熊猫dataframes

df_s = pd.DataFrame(np.random.randint(1,10,(5,10))) 

df_s.iloc[1,8] = '' 

df_s.iloc[3,8] = np.nan 

df_s['CDRFormUp'] = np.where(df_s.iloc[:,8].mask(df_s.iloc[:,8].str.len()==0).isnull(),'Yes','No') 

print(df_s) 

输出:。!。

0 1 2 3 4 5 6 7 8 9 CDRFormUp 
0 6 5 5 5 9 3 3 5 3 9  No 
1 5 4 7 3 9 6 8 9  9  Yes 
2 5 2 2 7 7 6 3 2 5 2  No 
3 8 2 1 9 7 3 7 8 NaN 8  Yes 
4 4 4 1 5 3 5 9 4 4 9  No 
+0

这就像一个魅力,非常感谢你! – Korzak

0

我怀疑你有空白的元素。

考虑datafame df_s

df_s = pd.DataFrame([ 
    [1, 'a', 'Yes'], 
    [2, '', 'No'], 
    [3, ' ', 'No'] 
]) 

df_s 

    0 1 2 
0 1 a Yes 
1 2  No 
2 3  No 

两个行1和2列1有什么样子的空白字符串。但它们不是

df_s.iloc[:, 1] == '' 

0 False 
1  True 
2 False 
Name: 1, dtype: bool 

您可能想要考虑查看整个事情是否为空白或首先剥离空白区域。

选项1
所有空白

df_s.iloc[:, 1].str.match('^\s*$') 

0 False 
1  True 
2  True 
Name: 1, dtype: bool 

,我们可以转换为是/否与

df_s.iloc[:, 1].str.match('^\s*$').map({True: 'no', False: 'yes'}) 

0 yes 
1  no 
2  no 
Name: 1, dtype: object 

添加新栏

df_s.assign(
    CDRFormUp=df_s.iloc[:, 1].str.match('^\s*$').map({True: 'no', False: 'yes'}) 
) 

    0 1 2 CDRFormUp 
0 1 a Yes  yes 
1 2  No  no 
2 3  No  no 

选项2
条白色空间,然后检查是否空

df_s.iloc[:, 1].str.strip() == '' 

0 False 
1  True 
2  True 
Name: 1, dtype: bool 

添加新的列

df_s.assign(
    CDRFormUp=df_s.iloc[:, 1].str.strip().eq('').map({True: 'no', False: 'yes'}) 
) 

    0 1 2 CDRFormUp 
0 1 a Yes  yes 
1 2  No  no 
2 3  No  no