【问题标题】:dataframe to frozenset数据帧到frozenset
【发布时间】:2018-02-13 14:35:15
【问题描述】:

我想将数据框转换为冻结集并将数据框列保留在冻结集中。

例子

x=pd.DataFrame(data=dict(sample=["A","B","C"],lane=[1,1,2]))
>>> x
   lane sample
0     1      A
1     1      B
2     2      C

我想要一些东西:

x2= {frozenset({("sample", "A"), ("lane", 1)}),
    frozenset({("sample", "B"), ("lane", 1)}),
    frozenset({("sample", "C"), ("lane", 2)})}

>>> x2
{frozenset({('sample', 'B'), ('lane', 1)}), frozenset({('sample', 'A'), ('lane', 1)}), frozenset({('lane', 2), ('sample', 'C')})}

我试过x.apply(frozenset,1),但它给了我:

0    (1, A)
1    (1, B)
2    (C, 2)
dtype: object

任何帮助都会很有用。 谢谢

【问题讨论】:

    标签: python pandas dataframe frozenset


    【解决方案1】:

    您可以使用pd.DataFrame.to_dict 将您的数据框转换为您需要的records 格式:

    x.to_dict('records')
    
    # [{'sample': 'A', 'lane': 1}, 
    #  {'sample': 'B', 'lane': 1}, 
    #  {'sample': 'C', 'lane': 2}]
    

    由于这会生成一个列表,因此您可以将 frozenset 映射到该列表,如下所示:

    # using abbreviation 'r' instead of 'records'
    map(lambda y: frozenset(y.iteritems()), x.to_dict('r'))
    
    # [frozenset([('sample', 'A'), ('lane', 1)]), 
    #  frozenset([('sample', 'B'), ('lane', 1)]), 
    #  frozenset([('sample', 'C'), ('lane', 2)])]
    

    或者,使用集合推导,如果您的输出应该是一组frozensets:

    {frozenset(y.iteritems()) for y in x.to_dict('records')}
    
    # set([frozenset([('sample', 'C'), ('lane', 2)]),  
    #      frozenset([('sample', 'B'), ('lane', 1)]), 
    #      frozenset([('sample', 'A'), ('lane', 1)])])
    

    【讨论】:

    • 我尝试了您的最后一个解决方案,但出现错误:{frozenset(y.iteritems()) for y in x.to_dict('records')} 这是错误:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <setcomp> AttributeError: 'dict' object has no attribute 'iteritems'
    • @NicolasRosewick 将 iteritems 更改为 items 如果您使用的是 python3。那么集合理解将是{frozenset(y.items()) for y in x.to_dict('records')}
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多