我想过滤 Pandas 系列以删除某些值。这似乎是一项如此简单的任务,但是对 same question 的首选答案对我不起作用。
这是我的可重现示例:
data = np.array([['','Col1','Col2'],
['Row1',1,2],
['Row2',3,4]])
myDF = pd.DataFrame(data=data[1:,1:],
index=data[1:,0],
columns=data[0,1:])
mySeries = myDF.loc[:, "Col1"]
mySeries[mySeries != 1]
我希望最后一行输出一行,包含值 3,但我却得到:
Row1 1
Row2 3
Name: Col1, dtype: object
我做错了什么?
请您参考如下方法:
考虑您正在创建的 NumPy 数组的数据类型:
data = np.array([['','Col1','Col2'],
['Row1',1,2],
['Row2',3,4]])
print(data)
array([['', 'Col1', 'Col2'],
['Row1', '1', '2'],
['Row2', '3', '4']],
dtype='<U4')
在提供给 np.array 之前,在嵌套列表中组合字符串和整数创建一个字符串数组,由 '<U4' 证明, 表示最大字符数。
如果你改用列表,你就不会遇到这个问题,因为实现确保了一个数组是用适当的类型创建的:
data = [['','Col1','Col2'],
['Row1',1,2],
['Row2',3,4]]
myDF = pd.DataFrame(data=[i[1:] for i in data[1:]],
index=[i[0] for i in data[1:]],
columns=data[0][1:])
