我很难将字典中的字符串拆分成DataFrame中的一个键的多行。到目前为止,我找不到合适的解决方案。任何帮助表示赞赏。
以下代码可以将字符串分成一行:
d_new = {k: dict(map(str.strip, x.split('||')) for x in v) for k, v in d.items()}
df = pd.DataFrame.from_dict(d_new, orient='index')
我的字典d看起来像这样:
{'Key1': ['A||1234', 'A||1235', 'A||1236', 'B||4567', 'C||78910'],
'Key2': ['A||165', 'A||135', 'B||888', 'B||1111']}
我想拆分,以便Key1有3行(对于A的三个不同参数),而Key2有2行。
所需的输出:
Key|A|B|C
Key1|1234|4567|78910
Key1|1235|4567|78910
Key1|1236|4567|78910
Key2|165|888|
Key2|135|1111|
Edit1:对不起,我不知道如何在这里做一张桌子。我尽可能地添加了所需的输出。
答案 0 :(得分:1)
问题是您需要为每个 字典值列表构造一个数据框。这是使用collections.defaultdict
的解决方案:
d = {'Key1': ['A||1234', 'A||1235', 'A||1236', 'B||4567', 'C||78910'],
'Key2': ['A||165', 'A||135', 'B||888', 'B||1111']}
from collections import defaultdict
def create_dataframe(k, x):
dd = defaultdict(list)
for item in x:
key, value = item.split('||')
dd[key].append(value)
return pd.DataFrame.from_dict(dd, orient='index').T.assign(Key=k).ffill()
df = pd.concat(create_dataframe(*item) for item in d.items())
print(df)
A B C Key
0 1234 4567 78910 Key1
1 1235 4567 78910 Key1
2 1236 4567 78910 Key1
0 165 888 NaN Key2
1 135 1111 NaN Key2