我有以下文本输出,我的目标是只在第1列中的值大于1但小于或等于4时选择第2列的值。所以我正在寻找Python来打印第2列值as [-6,0,-4]因为只有这些值符合第1列的标准。
我尝试了以下方法。
import pandas as pd
import numpy as np
data= pd.read_table('/Users/Hrihaan/Desktop/A.txt', dtype=float, header=None, sep='\s+').values
x=data[:,0]
y=np.where(1< x<= 4, data[:, 1], np.nan)
print(y)
我收到以下错误:ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
任何建议都会非常有用。
答案 0 :(得分:4)
Pandas有几种方法可以实现这一目标。一个简单的解决方案是使用query()
:
import pandas as pd
import numpy as np
data = {"a":np.arange(1,6), "b":[2,-6,0,-4,100]}
df = pd.DataFrame(data)
print(df)
a b
0 1 2
1 2 -6
2 3 0
3 4 -4
4 5 100
现在使用query
过滤,然后选择列b
:
df.query('1 < a <= 4').b
1 -6
2 0
3 -4
Name: b, dtype: int64
答案 1 :(得分:3)
第一次使用.loc
df.loc[(df.a>1)&(df.a<=4), 'b']
Out[316]:
1 -6
2 0
3 -4
第二个基于你自己的方法
np.where((df.a<= 4)&(df.a>1), df.b,np.nan)
Out[322]: array([ nan, -6., 0., -4., nan])
数据输入:
df = pd.DataFrame({"a":np.arange(1,6), "b":[2,-6,0,-4,100]})