【问题标题】:write panda data to csv将熊猫数据写入 csv
【发布时间】:2018-11-11 12:34:08
【问题描述】:

我有一个 csv 表,如下所示,每一列都有一些数据。 想要按 Name 过滤数据。我知道名称,我必须从中过滤。

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 中删除索引列。有什么更好的编码方式吗?熊猫新手在这里。

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')

【问题讨论】:

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


    【解决方案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")
    

    【讨论】:

    • 这个解决方案应该修改。它将显示所有不必要的列名(没有内容)以及我们想要的列名。
    • @steveJ 感谢您的指出!我已经更新了所需列名的答案:)
    【解决方案2】:

    尝试使用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)
    

    【讨论】:

    • 谢谢。有用。我的问题不止于此......我必须遍历可用的列表,因为需要在两者之间执行一些操作,并且直接不能使用 .isin 传递列表。在使用loop 时有什么办法可以将数据附加到 csv 中而不覆盖它?另外,我仍然在 csv 中有 index 列。想要摆脱它。
    • df1 对于某些 Name 可以为空,我也需要通过循环来检查。这就是为什么要避免 isin 。我想将新数据附加到现有的 csv 中。
    • 我会测试它,并会在某个时候回复。感谢您的时间和精力。
    • 它在附近达到了我的目的。根据我的要求做了一些修改。
    猜你喜欢
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多