【问题标题】:How do I list out all the different labels/strings in a certain column?如何列出某一列中的所有不同标签/字符串?
【发布时间】:2019-05-13 13:15:58
【问题描述】:

我想列出特定列中存在的每个标签/字符串的名称。此类标签将在列中出现多次(例如 Fleet、Travel 等):例如

Column1         Column2
Facility        Machine
Fleet           Other
Travel          Leased Vehicles
......          .......

如何编写代码来提取 numpy 数组中的标签?

谢谢。

期望的输出 例如。 feature_labels = np.array(['Column1_Facility', 'Column1_Fleet', 'Column2_Machine', 等等

【问题讨论】:

    标签: python-3.x string list numpy


    【解决方案1】:

    numpy 具有用于准向量化字符串操作的char 模块。例如,您可以使用np.char.add:

    import functools as ft
    
    data
    # array([['Column1', 'Column2'],
    #        ['Facility', 'Machine'],
    #        ['Fleet', 'Other'],
    #        ['Travel', 'Leased Vehicles'],
    #        ['......', '.......']], dtype='<U15')
    
    ft.reduce(np.char.add, (data[:1], '_', data[1:]))
    # array([['Column1_Facility', 'Column2_Machine'],
    #        ['Column1_Fleet', 'Column2_Other'],
    #        ['Column1_Travel', 'Column2_Leased Vehicles'],
    #        ['Column1_......', 'Column2_.......']], dtype='<U31')
    

    【讨论】:

    • 谢谢。帮助解决我想到的另一个问题:)
    【解决方案2】:

    我不完全确定我完全理解这个问题,但这是我的尝试:

    df = pd.DataFrame({'Column1': ['Facility', 'Fleet', 'Travel'], 'Column2': ['Machine', 'Other', 'Leased Vehicles']})
    df
    
    #Outputs:
        Column1 Column2
    0   Facility    Machine
    1   Fleet   Other
    2   Travel  Leased Vehicles
    

    然后遍历列以根据需要将列名称附加到功能名称:

    for col in df.columns:
        df[col] = df[col].apply(lambda x: f'{col}_{x}')
    

    以上将为您提供:

                 Column1    Column2
    0   Column1_Facility    Column2_Machine
    1   Column1_Fleet       Column2_Other
    2   Column1_Travel      Column2_Leased Vehicles
    

    现在您可以简单地提取每列的值:

    df.Column1.values
    

    结果:

    array(['Column1_Facility', 'Column1_Fleet', 'Column1_Travel'], dtype=object)

    编辑:

    如果您只想列出列中的唯一值:

                 Column1    Column2
    0   Column1_Facility    Column2_Machine
    1   Column1_Fleet       Column2_Other
    2   Column1_Travel      Column2_Leased Vehicles
    3   Column1_Facility    Column2_Machine
    

    你需要使用:

    df.Column1.unique()
    

    结果:

    array(['Column1_Facility', 'Column1_Fleet', 'Column1_Travel'], dtype=object)

    【讨论】:

    • 您好,感谢您的快速回复。我测试了您的建议并得到以下回复: array(['Category_Facility', 'Category_Fleet', 'Category_Fleet', ..., 'Category_Travel and Entertainment', 'Category_Other', 'Category_nan'], dtype=object)
    • 谢谢!如果同一列中的相同名称标签(例如 Fleet、Others 等)出现多次(多行)但我希望它只在数组中列出一次,新代码的外观如何?例如,如果一列中有标签名称(与数十万行相关联),我只需要知道存在于该特定列中的每个标签的不同名称是什么。希望我能够清楚地解释这一点。再次感谢您。
    • 您需要使用df.Column1.unique() 而不是.values
    • 再次您好,希望您能再次在这里提供帮助。似乎每次我运行同一个单元格时,列字(例如“类别”)都会在整个过程中连接起来:for col in df.columns: df[col] = df[col].apply(lambda x: f'{col} _{x}') df.Category.unique() 运行 4 次后的结果...:它一直在上次运行的基础上构建。 array(['Category_Category_Category_Category_Category_Facility', 'Category_Category_Category_Category_Category_Fleet'.....等我只想显示1次的列标题(例如“类别”)。谢谢
    • 您不应该多次运行 for 循环。每次运行时,它都会将列名附加到每列中的值。您可以将它放入一个函数中并且只调用一次,或者只在笔记本的开头调用并且不再调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2023-02-06
    • 2015-11-18
    相关资源
    最近更新 更多