Python 使用loc、iloc和检查条件访问pandas中的单元格值

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,

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,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()