把熊猫数据写入csv

时间:2018-06-01 11:15:55

标签: python python-3.x python-2.7 pandas csv

我有一张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')

2 个答案:

答案 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")
相关问题