我有一个像这样的pandas数据框:
letter;Pairs;Count
abandon;frozenset(['abandon', 'dm']);1
abattoir;frozenset(['abattoir', 'year']);1
abbey;frozenset(['abbey', 'mean']);1
我想写一个看似如下的csv:
abandon;dm
abbattoir;year
abbey;mean
标准pandas数据框选择似乎不起作用,因为frozenset
使事情变得复杂。
答案 0 :(得分:2)
我假设数据框中的第一行是标题行,所以:
print(df)
letter Pairs Count
0 abandon (dm, abandon) 1
1 abattoir (abattoir, year) 1
2 abbey (abbey, mean) 1
(Pairs
中元素周围的圆括号是pandas如何打印frozensets
)
您可以将其更改为名为df2
的数据框,如下所示:
letter Pairs
0 abandon dm
1 abattoir year
2 abbey mean
通过做:
df2 = pd.DataFrame([df['letter'],(df['Pairs']-set(df['letter'])).str.join('')]).T
这首先在您的letter
和Pairs
列之间执行set difference,以便让frozenset
中的元素不与letter
中的元素相同。然后,您可以使用此元素和DataFrame
列中的元素创建新的letter
。最后,您转置DataFrame
以便按照您想要的方式进行定位。
答案 1 :(得分:0)
我认为
print(X.apply(lambda x: ";".join(x[1]),axis=1).to_csv(index=False))
或
print(X.apply(lambda x: ";".join(x.Pairs),axis=1).to_csv(index=False))
其中X是您的数据框可能有效