我在python中有一个集合字典,类似于:
{'+++': {'---', '--0', '-00', '0--', '00-', '000'}, '0++': {'+--', '+0-', '---', '--0', '-00', '0--', '00-', '000'}}
我想把它转换成一个pandas字典,有两列:第一列是字典的索引,第二列是字符串集。当我尝试使用Dataframe.from_dict时,panda创建的列数与一集中字符串的最大数量一样多。
你可以在这里做explode
,d
是你的字典
#d = {'+++': {'---', '--0', '-00', '0--', '00-', '000'}, '0++': {'+--', '+0-', '---', '--0', '-00', '0--', '00-', '000'}}
out = pd.Series(d).explode().reset_index(name='value')
Out[306]:
index value
0 +++ ---
1 +++ 00-
2 +++ -00
3 +++ 000
4 +++ --0
5 +++ 0--
6 0++ ---
7 0++ +0-
8 0++ +--
9 0++ 00-
10 0++ -00
11 0++ 000
12 0++ --0
13 0++ 0--
或者只是
pd.Series(d).reset_index(name='value')
Out[310]:
index value
0 +++ {---, 00-, -00, 000, --0, 0--}
1 0++ {---, +0-, +--, 00-, -00, 000, --0, 0--}
我认为您应该在dict-by-list中围绕您的值。
import pandas as pd
test_dict = {
"+++": {"---", "--0", "-00", "0--", "00-", "000"},
"0++": {"+--", "+0-", "---", "--0", "-00", "0--", "00-", "000"},
}
for key, value in test_dict.items():
test_dict[key] = [value]
print(test_dict)
然后你的dict改为:
{
"+++": [{"00-", "-00", "---", "0--", "--0", "000"}],
"0++": [{"00-", "-00", "---", "+--", "0--", "+0-", "--0", "000"}],
}
最后,使用from_dict:
test_df = pd.DataFrame.from_dict(test_dict, orient="index").reset_index()
print(test_df)
这就是结果。
index 0
0 +++ {00-, -00, ---, 0--, --0, 000}
1 0++ {00-, -00, ---, +--, 0--, +0-, --0, 000}
如果您希望集合保持完整,可以尝试:
data = {'+++': {'---', '--0', '-00', '0--', '00-', '000'}, '0++': {'+--', '+0-', '---', '--0', '-00', '0--', '00-', '000'}}
pd.DataFrame([data.keys(), data.values()]).T
0 1
0 +++ {--0, -00, ---, 00-, 0--, 000}
1 0++ {--0, -00, +--, ---, 00-, 0--, 000, +0-}
我认为手动将键和值映射到特定列将适合您的问题。
a = {'+++': {'---', '--0', '-00', '0--', '00-', '000'}, '0++': {'+--', '+0-', '---', '--0', '-00', '0--', '00-', '000'}}
pd.DataFrame({'key': a.keys(), 'value': a.values()})