在熊猫中给出卷数时如何命名

时间:2018-09-05 05:14:10

标签: python-3.x pandas dataframe data-manipulation

我的代码是:

df=pd.read_excel('vip.xlsx')
df
b=df['Roll No']
a=[x for x in  map(str,b) if x[:8] == '12153162'] 
d=df['Name']
c=[y for y in map(str,d)]
if a in df['Roll No']:
    print(df['Name'])

我为此输入错误:

TypeError: unhashable type: 'list'

例如,我的数据框是:

Name          Roll No
Rahil         1215316235
Meher         1210316934
Sreejan       1215316235
Aditya        1215316952
Ajith         1215316002

对于此数据框,我上面的代码的预期输出为:

 Rahil
 Sreejan

那么我如何获得代码的预期输出?

2 个答案:

答案 0 :(得分:1)

使用boolean indexing,将astype的值转换为字符串,并通过索引选择前8个值:

s = df.loc[df['Roll No'].astype(str).str[:8] == '12153162', 'Name']
print (s)
0      Rahil
2    Sreejan
Name: Name, dtype: object

df1 = df[df['Roll No'].astype(str).str[:8] == '12153162']
print (df1)
      Name     Roll No
0    Rahil  1215316235
2  Sreejan  1215316235

如果要使用列表推导进行过滤:

s = df.loc[[str(x)[:8] == '12153162' for x in df['Roll No']], 'Name']
print (s)

0      Rahil
2    Sreejan
Name: Name, dtype: object

答案 1 :(得分:0)

我相信此行会引发异常:

if a in df['Roll No']:

'a'是一个列表(可变类型),键必须是不可变的。

相反,您可以使用'isin'方法进行选择:

names = df['Name'][df['Roll No'].isin(a)]
print(names)