问题:将特定的选定列提取到新DataFrame中作为副本
我有一个带有4列的pandas DataFrame,我想创建一个只有三个列的新 DataFrame 。这个问题类似于:从数据框中提取特定的列,但对于不是R的熊猫来说。以下代码不起作用,会引发错误,并且肯定不是熊猫的方式。
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
熊猫式的做法是什么?
回答 0
有一种方法可以做到,它实际上看起来类似于R
new = old[['A', 'C', 'D']].copy()
在这里,您只是从原始数据框中选择所需的列,并为这些列创建变量。如果您想完全修改新的数据框,则可能要.copy()
避免使用SettingWithCopyWarning
。
另一种方法是使用filter
默认创建副本的方法:
new = old.filter(['A','B','D'], axis=1)
最后,根据原始数据框中的列数,使用a表示它可能更简洁drop
(默认情况下也会创建一个副本):
new = old.drop('B', axis=1)
回答 1
最简单的方法是
new = old[['A','C','D']]
。
回答 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
回答 3
通用功能形式
def select_columns(data_frame, column_names):
new_frame = data_frame.loc[:, column_names]
return new_frame
专门针对您上面的问题
selected_columns = ['A', 'C', 'D']
new = select_columns(old, selected_columns)
回答 4
如果您想要一个新的数据框,则:
import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new= old[['A', 'C', 'D']]
回答 5
据我所知,使用过滤器功能时不一定需要指定轴。
new = old.filter(['A','B','D'])
返回与相同的数据框
new = old.filter(['A','B','D'], axis=1)
回答 6
按索引列:
# selected column index: 1, 6, 7
new = old.iloc[: , [1, 6, 7]].copy()
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。