我是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不起作用?
答案 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