当前位置: 首页 > 知识库问答 >
问题:

panda. loc或. iloc从数据集中选择列

姚文轩
2023-03-14

我一直试图从数据集中为所有行选择一组特定的列。我尝试了下面这样的东西。

train_features = train_df.loc[,[0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]]

我想提到的是,所有行都是包含的,但只需要编号的列。有没有更好的方法来解决这个问题。

样本数据:

age  job        marital   education    default   housing   loan   equities   contact     duration   campaign   pdays   previous   poutcome   emp.var.rate   cons.price.idx   cons.conf.idx   euribor3m     nr.employed   y
56   housemaid  married   basic.4y     1         1         1      1          0           261        1          999     0          2          1.1            93.994           -36.4           3.299552287   5191          1
37   services   married   high.school  1         0         1      1          0           226        1          999     0          2          1.1            93.994           -36.4           0.743751247   5191          1
56   services   married   high.school  1         1         0      1          0           307        1          999     0          2          1.1            93.994           -36.4           1.28265179    5191          1

我试图忽略数据集中的工作、婚姻、教育和y列。y列是目标变量。

共有2个答案

濮阳靖
2023-03-14

您可以通过底层的Numpy数组访问列值

考虑数据框df

df = pd.DataFrame(np.random.randint(10, size=(5, 20)))
df

可以对底层数组进行切片

slc = [0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
df.values[:, slc]

array([[1, 3, 9, 8, 3, 2, 1, 6, 6, 0, 3, 9, 8, 5, 9, 9],
       [8, 0, 2, 3, 7, 8, 9, 2, 7, 2, 1, 3, 2, 5, 4, 9],
       [1, 1, 9, 3, 5, 8, 8, 8, 8, 4, 8, 0, 5, 4, 9, 0],
       [6, 3, 1, 8, 0, 3, 7, 9, 9, 0, 9, 7, 6, 1, 4, 8],
       [3, 2, 3, 3, 9, 8, 3, 8, 3, 4, 1, 6, 4, 1, 6, 4]])

或者你可以从这个切片重建一个新的数据帧

pd.DataFrame(df.values[:, slc], df.index, df.columns[slc])

这并不像你想象的那样干净和直观

df.iloc[:, slc]

您还可以使用slcdf.columns对象进行切片,并将其传递给df.loc

df.loc[:, df.columns[slc]]
姚乐家
2023-03-14

如果需要按位置选择,请使用iloc

train_features = train_df.iloc[:, [0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]]
print (train_features)
   age  default  housing  loan  equities  contact  duration  campaign  pdays  \
0   56        1        1     1         1        0       261         1    999   
1   37        1        0     1         1        0       226         1    999   
2   56        1        1     0         1        0       307         1    999   

   previous  poutcome  emp.var.rate  cons.price.idx  cons.conf.idx  euribor3m  \
0         0         2           1.1          93.994          -36.4   3.299552   
1         0         2           1.1          93.994          -36.4   0.743751   
2         0         2           1.1          93.994          -36.4   1.282652   

   nr.employed  
0         5191  
1         5191  
2         5191  

另一种解决方案是删除不必要的列:

cols= ['job','marital','education','y']
train_features = train_df.drop(cols, axis=1)
print (train_features)
   age  default  housing  loan  equities  contact  duration  campaign  pdays  \
0   56        1        1     1         1        0       261         1    999   
1   37        1        0     1         1        0       226         1    999   
2   56        1        1     0         1        0       307         1    999   

   previous  poutcome  emp.var.rate  cons.price.idx  cons.conf.idx  euribor3m  \
0         0         2           1.1          93.994          -36.4   3.299552   
1         0         2           1.1          93.994          -36.4   0.743751   
2         0         2           1.1          93.994          -36.4   1.282652   

   nr.employed  
0         5191  
1         5191  
2         5191  
 类似资料:
  • 问题内容: 我一直在尝试从数据集中为所有行选择一组特定的列。我尝试了以下类似的方法。 我想提一下,所有行都包含在内,但只需要编号的列即可。有没有更好的方法来解决这个问题。 样本数据: 我试图忽略我的数据集中的工作,婚姻,教育和y栏。y列是目标变量。 问题答案: 如果需要按位置选择,请使用: 另一个解决方案是不必要的列:

  • 问题内容: 我正在尝试从以下查询中获取行数。我只得到行计数为1,但有35条记录。您能否让我知道如何从内部查询中获取计数? 谢谢 问题答案: 您缺少FROM,需要为子查询指定别名。

  • 问题内容: 我有一个称为Data的数据库,它是数据库中每个实体的父级。它包含Id等通用属性。然后,我有了一个扩展Data的实体,这也是由于其子类的通用功能而引起的。我的数据库中的映射是正确的。 这是我的等级制度的一个例子 并且表已正确映射: 无论如何,是否在数据库中查询所有作为Employee实例的Employee子类(FullTimeEmployee,PartTimeEmployee),而不在查

  • 问题内容: 如何编写SQL语句从三个表中选择数据? 问题答案: 使用联接 这将要求每个表都有一个table_1_id键,并且每个表中都有一个条目。 如果table_2或table_3可能没有数据,但您仍想显示来自table_1的数据,则可以使用LEFT JOIN

  • 我使用以下列表从控制器填充了JSP中的下拉列表:“” 例如,我使用下拉菜单将5保存为db中thirdPartyOccupationId的值。当我重新加载页面时,值5不是选中的值。 同一段代码正在处理不同的字段,我不知道我错过了什么。 模型类: ReportClass.java 控制器.java 感谢任何指点。

  • 在Pandas的数据框中,一些列是数字的,像浮动;一些是非数字的,像对象。我们希望删除那些数值列为NaN的行,但不删除那些非数值列为NaN的行。 例如,对于具有四列的df:a、B、C和D。a和C的数据类型为Object,B和D的数据类型为Float。 我们将只删除其中一些数字列(浮点数)为NaN的行,而不应该删除其中一些非数字列(对象)为NaN的行。 最终结果如下: 我的步骤是: 检查哪些列的数据