使用列子集切片数据框

时间:2016-11-06 22:04:35

标签: python pandas

我是python的初学者并尝试仅使用列的一个子集设置数据框的实例(切片?)并且有两种方法,我认为两种方法都应该有效,但只有一种似乎可以工作并试图理解原因。 Method1有效,但method2返回错误KeyError :(' Name',' Cost') 方法1:

import pandas as pd
purchase_1 = pd.Series({'Name': 'Chris',
                        'Item Purchased': 'Dog Food',
                        'Cost': 22.50})
purchase_2 = pd.Series({'Name': 'Kevyn',
                        'Item Purchased': 'Kitty Litter',
                        'Cost': 2.50})
purchase_3 = pd.Series({'Name': 'Vinod',
                        'Item Purchased': 'Bird Seed',
                        'Cost': 5.00})

df = pd.DataFrame([purchase_1, purchase_2, purchase_3], index=['Store 1', 'Store 1', 'Store 2'])
columns_to_keep = ['Name','Cost']
df = df['Name','Cost']

方法2:

v = [1+1i 2+2i];
v = real(v) + 10i;

据我所知,两者似乎都将实例df设置为列列表。 想了解为什么method2不起作用?

1 个答案:

答案 0 :(得分:2)

numpy / pandas中的http://google.com是如何工作的。

  

当选择对象obj为a时,将触发高级索引   非元组序列对象,ndarray(数据类型为integer或bool),   或者具有至少一个序列对象或ndarray(数据类型的元组)的元组   整数或布尔)

请注意,方法2中df = df['Name','Cost']df = df[('Name','Cost')]相同 - 这意味着使用元组作为选择对象;称为基本索引。

  

在Python中,x[(exp1, exp2, ..., expN)]相当于x[exp1, exp2, ..., expN];后者只是前者的语法糖。

您需要将列放在数组列表(如方法1中)而不是元组以触发高级索引这将在go中选择多列中的项目:

>>> df = df[['Name','Cost']] # also df[np.array(['Name','Cost'])] works
>>> df
          Name  Cost
Store 1  Chris  22.5
Store 1  Kevyn   2.5
Store 2  Vinod   5.0
相关问题