我有一张csv表,它看起来如下,每列都有一些数据。 想按名称过滤数据。我知道名字,我必须从中过滤。
Name gender address age post city
A M abc 20 dd ASD
C F xyz 21 ll KLM
B M lmn 22 mm NOP
想要输出像。
Name address post city
A abc dd ASD
B lmn mm NOP
下面的代码显然会覆盖csv中的第一个数据。如何避免这种情况并解决这个问题。另外,想要从excel中删除索引列。有没有更好的方法来编码?这里是Panda的新手。
for i in ['A','B']: #The names list is huge , taking 2 as example
df=pd.read_csv('some.xlsx',index_col=False)
df1= df.loc[df['Name'] == i, ['Name','address','post','city']]
df1.to_csv('ABC.csv')
答案 0 :(得分:1)
尝试使用 isin :
<强>实施例强>
df=pd.read_csv('some.xlsx',index_col=False)
df1 = df.loc[df['Name'].isin(['A','B']), ['Name','address','post','city']]
df1.to_csv('ABC.csv')
isin
根据评论进行编辑 - 使用循环
df1 = None
for i in ['A','B']:
if df1 is not None:
df1 = df1.append( df.loc[df['Name'] == i, ['Name','address','post','city']] )
else:
df1 = df.loc[df['Name'] == i, ['Name','address','post','city']]
df1.to_csv(filename)
答案 1 :(得分:1)
Series.str.contains是您需要的功能。它返回一个布尔系列,可用于在用作索引时过滤DataFrame。对于多个名称,请使用|
(管道符号)分隔名称。
names_list = ['A', 'B']
my_names = '|'.join(names_list) # my_names = "A|B"
df = pd.read_csv('some.xlsx', index_col=False)
df1 = df1[df["Name"].str.contains(my_names)]
df1 = df1[['Name', 'address', 'post', 'city']]
df1.to_csv("filtered.csv")