无法评估列的空值
问题描述:
我已经阅读了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或别的东西
任何帮助将是令人难以置信的赞赏 感谢
答
您需要使用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
答
我怀疑你有空白的元素。
考虑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
毫无''操作者在Python。也许你的意思是'!='? – SwiftsNamesake