将特定选定列作为副本提取到新DataFrame

时间:2016-01-08 17:34:45

标签: python pandas chained-assignment

我有一个包含4列的pandas DataFrame,我想创建数据框,有三列。这个问题类似于:Extracting specific columns from a data frame但是对于不是R的pandas。以下代码不起作用,引发错误,并且肯定不是这种做法的pandasnic方式。

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator 

什么是pandasnic方式呢?

7 个答案:

答案 0 :(得分:201)

有一种方法可以做到这一点,它实际上看起来类似于R

new = old[['A', 'C', 'D']].copy()

在这里,您只需从原始数据框中选择所需的列,然后为这些列创建变量。如果您想要修改新的数据框,您可能希望使用.copy()来避免SettingWithCopyWarning

另一种方法是使用filter默认情况下创建副本:

new = old.filter(['A','B','D'], axis=1)

最后,根据原始数据框中的列数,使用drop表达此内容可能更为简洁(默认情况下也会创建副本):

new = old.drop('B', axis=1)

答案 1 :(得分:2)

另一个更简单的方法似乎是:

  

new = pd.DataFrame([old.A,old.B,old.C])。transpose()

其中old.column_name将给您一系列。 列出所有要保留的列系列,并将其传递给DataFrame构造函数。我们需要进行转置来调整形状。

In [14]:pd.DataFrame([old.A,old.B,old.C]).transpose()
Out[14]: 
   A   B    C
0  4  10  100
1  5  20   50

答案 2 :(得分:2)

通用功能形式

selected_columns = ['A', 'C', 'D']
new = select_columns(old, selected_columns)

特定于您上面的问题

<?php
session_start();
header('Content-Type: text/html; charset=utf-8');
include 'dbconnect.php';

$output = array(5);

$answer_array = array('answerA','answerB','answerC','answerD'); 
//loads answers into array

$query = ("select * from questionTable ORDER BY RAND () LIMIT 1 
");//sql query to get questions
$result =mysqli_query($conn, $query) or die(mysqli_error($conn));

while ($row = mysqli_fetch_assoc($result)){
    $row_cnt = mysqli_num_rows($result);
    $output['question']=$row['question'];
    $query2 = ("select * from answerTable where questionId = '". ($row 
 ['questionId'])."' order by rand()");//sql query to get answers for 
 questions by questionId 
    $result2 =mysqli_query($conn, $query2) or die(mysqli_error($conn));
    $i=0;
    $question=$row ['question'];
    while ($row2 = mysqli_fetch_assoc($result2)){
        $output[$answer_array[$i]]=$row2 ['answer'];
        $i++;
        $POST = $output;
    }
                                      }

  echo $POST ['question'].",";

  echo $POST['answerA'].",";

  echo $POST['answerB'].",";

  echo $POST['answerC'].",";

  echo $POST['answerD'];
  ?>

答案 3 :(得分:2)

如果您要使用新的数据框,则:

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new=  old[['A', 'C', 'D']]

答案 4 :(得分:0)

据我所知,使用过滤器功能时不必指定轴。

new = old.filter(['A','B','D'])

返回与

相同的数据帧
new = old.filter(['A','B','D'], axis=1)

答案 5 :(得分:0)

最简单的方法是

new = old[['A','C','D']]

答案 6 :(得分:0)

按索引列:

# selected column index: 1, 6, 7
new = old.iloc[: , [1, 6, 7]].copy()