如何从df中选择列a和b,并将它们保存到新的数据帧df1中?
index a b c
1 2 3 4
2 3 4 5
尝试失败:
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
如何从df中选择列a和b,并将它们保存到新的数据帧df1中?
index a b c
1 2 3 4
2 3 4 5
尝试失败:
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
当前回答
若要排除某些列,可以将它们放在列索引中。例如:
A B C D
0 1 10 100 1000
1 2 20 200 2000
选择除两个以外的所有选项:
df[df.columns.drop(['B', 'D'])]
输出:
A C
0 1 100
1 2 200
也可以使用truncate方法选择中间列:
df.truncate(before='B', after='C', axis=1)
输出:
B C
0 10 100
1 20 200
其他回答
前面的答案中讨论的不同方法基于这样的假设:用户知道要删除或子集的列索引,或者用户希望使用一系列列(例如“C”和“E”之间)来子集数据帧。
pandas.DataFrame.drop()当然是一个基于用户定义的列列表对数据进行子集的选项(尽管您必须谨慎地始终使用数据帧的副本,并且不应将就地参数设置为True!!)
另一个选项是使用pandas.columns.difference(),它对列名进行设置差异,并返回包含所需列的数组的索引类型。以下是解决方案:
df = pd.DataFrame([[2,3,4], [3,4,5]], columns=['a','b','c'], index=[1,2])
columns_for_differencing = ['a']
df1 = df.copy()[df.columns.difference(columns_for_differencing)]
print(df1)
输出将是:
b c
1 3 4
2 4 5
要选择多个列,请提取并查看它们:df是先前命名的数据帧。然后创建一个新的数据帧df1,并选择要提取和查看的列a到D。
df1 = pd.DataFrame(data_frame, columns=['Column A', 'Column B', 'Column C', 'Column D'])
df1
将显示所有必需的列!
从0.21.0开始,在列表中使用.loc或[](其中包含一个或多个缺失的标签)是不推荐使用.reindex的。因此,问题的答案是:
df1 = df.reindex(columns=['b','c'])
在以前的版本中,只要找到至少一个键,就可以使用.loc〔标签列表〕(否则会引发KeyError)。此行为已弃用,现在显示警告消息。建议使用.reindex()。
阅读更多关于索引和选择数据的信息。
在最新版本的Pandas中,有一种简单的方法可以做到这一点。列名(字符串)可以按您喜欢的方式进行切片。
columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)
对于Pandas,
具有列名称
dataframe[['column1','column2']]
要通过iloc和带有索引编号的特定列进行选择,请执行以下操作:
dataframe.iloc[:,[1,2]]
带有loc的列名可以使用如下
dataframe.loc[:,['column1','column2']]