python - 在 Pandas 数据框中选择多列

标签 python pandas dataframe select

如何从 df 中选择列 ab,并将它们保存到新的数据框 df1 ?

index  a   b   c
1      2   3   4
2      3   4   5

尝试失败:

df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']

最佳答案

无法按照您尝试的方式对列名(字符串)进行切片。

这里有几个选项。如果您从上下文中知道要切出哪些变量,则可以通过将列表传递给 __getitem__ syntax 来仅返回这些列的 View 。 ([] 的)。

df1 = df[['a', 'b']]

或者,如果重要的是用数字而不是名称来索引它们(假设您的代码应该在不知道前两列的名称的情况下自动执行此操作),那么您可以这样做:

df1 = df.iloc[:, 0:2] # Remember that Python does not slice inclusive of the ending index.

此外,您应该熟悉 Pandas 对象的 View 与该对象的副本的概念。上述第一个方法将在内存中返回所需子对象(所需切片)的新副本。

但是,有时 Pandas 中的索引约定不会这样做,而是为您提供一个新变量,该变量仅引用与原始对象中的子对象或切片相同的内存块。第二种索引方式会发生这种情况,因此您可以使用 .copy() 方法对其进行修改以获取常规副本。发生这种情况时,更改您认为的切片对象有时会更改原始对象。留意这一点总是好的。

df1 = df.iloc[0, 0:2].copy() # To avoid the case where changing df1 also changes df

要使用iloc,您需要知道列位置(或索引)。由于列位置可能会改变,而不是硬编码索引,您可以使用 iloc 以及数据帧对象的 columns 方法的 get_loc 函数来获取列索引。

{df.columns.get_loc(c): c for idx, c in enumerate(df.columns)}

现在您可以使用此字典通过名称和使用 iloc 访问列。

关于python - 在 Pandas 数据框中选择多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285613/

相关文章:

python - 将字典的字典转换为 pandas 数据框

python - Pandas-对于数据框中的每一行检查excel文件中是否存在值

python - 不在 ListView 中时,django rest framework 添加字段

python - 解决python中的pd.get_dummies功能障碍

python - 如何更改 Pandas 中多列的数据类型

python - 如何将两个系列逐行追加到数据框中

dataframe - pyspark 数据帧总和

Python SMTP : emails being combined into one

python - 如何在 Python 中旋转数组?

python - 从 "lists of lists"和 "list"创建两个单独的 "list of lists"