Python 使用loc、iloc和检查条件访问pandas中的单元格值
UCI国会投票数据集,其中1.0表示赞成,0.0表示反对,NaN表示弃权。第二组列是我试图添加到dataframe中的,但这些值不正确。 我正在尝试对该数据帧进行二值化,因此有如下内容:Python 使用loc、iloc和检查条件访问pandas中的单元格值,python,pandas,Python,Pandas,UCI国会投票数据集,其中1.0表示赞成,0.0表示反对,NaN表示弃权。第二组列是我试图添加到dataframe中的,但这些值不正确。 我正在尝试对该数据帧进行二值化,因此有如下内容: 100 for yay 010 for nay 001 for abstain 所以我可以运行关联规则。 我能够创建16个额外的列,因为从v1到v16有16张弃权票。 但是,当我试图通过检查上面显示的原始投票列中的值来创建16个nay列时,它不起作用,正如您在上面看到的那样,对于nay_v1,它应该是1,1,
100 for yay
010 for nay
001 for abstain
所以我可以运行关联规则。
我能够创建16个额外的列,因为从v1到v16有16张弃权票。
但是,当我试图通过检查上面显示的原始投票列中的值来创建16个nay列时,它不起作用,正如您在上面看到的那样,对于nay_v1,它应该是1,1,0,1,0,但它是1,1,1,1,1。
弃权栏是使用isna创建的,但对于nay,我想检查投票栏值是否为0.0,如果是,则为该投票的nay栏输入1.0
基于这个网站上的答案,我尝试了两种使用loc和iloc的方法,但都不起作用,我认为输出都是我上面发布的
第一种方法:
for (idx, row) in cvotes.iterrows():
for c in cols:
if row.loc[c]==0.0:
cvotes[f'nay_{c}'] = 1.0
elif row.loc[c] == 1.0:
cvotes[f'nay_{c}'] = 0.0
elif row.loc[c] == np.nan:
cvotes[f'nay_{c}'] = 0.0
第二种方法:
for c in cols:
for i in range(len(cvotes.iloc[:][c])):
val = cvotes.iloc[i][c]
if val == 0.0:
cvotes[f'nay_{c}'] = 1.0
else:
cvotes[f'nay_{c}'] = 0.0
我做错了什么?这相当令人沮丧,因为我认为我可以使用numpy数组索引,甚至Python列表索引
编辑:
示例数据帧:
cvotes = pd.read_csv('house-votes-84.data', sep=',', header=None)
cvotes.head()
cvotes.columns = ['party', 'v1','v2','v3', 'v4','v5','v6','v7',
'v8', 'v9', 'v10', 'v11', 'v12', 'v13','v14','v15',
'v16']
cvotes.head()
从以下站点下载csv:
这就是我想要的结果:
v1 nay_v1
0.0 1.0
0.0 1.0
NaN 0.0
0.0 1.0
1.0 0.0
更新了我的代码,但现在我只得到了0
# make cols for is nay
for c in cols:
#make column preset to val
cvotes[f'nay_{c}']= 0.0
#iterate and change vals on vote col condition
for i in range(len(cvotes.iloc[:][c])):
val = cvotes.iloc[i][c]
#print(val)
if val == 0.0:
cvotes.iloc[i][f'nay_{c}'] = 1.0
else:
cvotes.iloc[i][f'nay_{c}'] = 0.0
我看到了:
而且:
for c in cols:
cvotes[f'nay_{c}'] = cvotes[c]
cvotes.loc[cvotes[c] == 0.0, f'nay_{c}']=1.0
cvotes.loc[cvotes[c] == 1.0, f'nay_{c}']=0.0
cvotes.loc[cvotes[c].isna(), f'nay_{c}']=0.0
pd.set_option('display.max_columns', None)
cvotes.head()
获取正确的输出:
产出:
请复制并粘贴示例数据帧和您的预期输出,我们无法使用images@ansev完成,谢谢耐心。我的预期输出在给出的示例中表示为“不”_v1@mLstudent33我仍然不清楚您希望您的预期输出是什么。你能在Excel中用几行输入一些东西,然后复制粘贴成代码吗?这能回答你的问题吗?还有,如果有人来这里看的话,只要看到pd.get_假人可能会帮我节省很多时间。
# try dummy variables for each column of votes
v1 = pd.get_dummies(cvotes['v1'])
v1.head()