gpt4 book ai didi

python - 有效地将具有元组键和列表值的字典转换为 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:28 24 4
gpt4 key购买 nike

我有一个字典,它以字符串元组作为键,以列表作为值,例如

mydict = {(('aa', 'bbbb'), ('c',)): [1,52,35,12], (('c', 'aa'), ('d',)): [4424,512]}

我想进入 panas DataFrame,其中元组键应该是一列,值应该是另一列。我还需要保存在列中的元组的长度。最后,我需要将键的长度除以键的长度作为另一列。

目前我正在使用代码

myDF = pd.DataFrame()
for key, value in mydict.items():
myDF_temp = pd.DataFrame.from_dict({'value_count': [len(value) / len(key)],
'key_count': [len(key)]})
myDF_temp['key'] = 1
myDF_temp['value'] = 1
myDF_temp['key'] = myDF_temp['key'].astype(object)
myDF_temp['value'] = myDF_temp['value'].astype(object)
myDF_temp.set_value(0, 'key', tuple(key))
myDF_temp.set_value(0, 'value', tuple(value))
myDF = myDF.append(myDF_temp)

由于重新附加数据帧,速度非常慢。

对于这个例子我期待

myDF
key_count value_count key value
0 2 1 ((c, aa), (d,)) (4424, 512)
0 2 2 ((aa, bbbb), (c,)) (1, 52, 35, 12)

我怎样才能有效地做到这一点?

最佳答案

您可以使用 Series构造函数 str.len对于元组的长度和 mask用于使用 apply 转换为一项 元组 :

mydict = {('a', 'b'): [1,2,3], ('c'): [4,5]}

df = pd.Series(mydict).reset_index()
df.columns = ['key','value']
print (df)
key value
0 c [4, 5]
1 (a, b) [1, 2, 3]

l = df['key'].str.len()
df['key_count'] = l
df['value_count'] = df['value'].str.len() / l
df['key'] = df['key'].mask(l == 1, df['key'].apply(tuple))
df['value'] = df['value'].apply(tuple)
print (df)
key value key_count value_count
0 (c,) (4, 5) 1 2.0
1 (a, b) (1, 2, 3) 2 1.5

有了新数据:

print (df)
key value key_count value_count
0 (c,) (4424, 512) 1 2.0
1 (aa, bbbb) (1, 52, 35, 12) 2 2.0

编辑:

mydict = {(('aa', 'bbbb'), ('c',)): [1,52,35,12], (('c', 'aa'), ('d',)): [4424,512]}
s1 = pd.Series(mydict)
s = pd.Series(s1.index.values.tolist())
df = pd.concat([s,s1.reset_index(drop=True)], axis=1)
df.columns = ['key','value']
print (df)
key value
0 ((aa, bbbb), (c,)) [1, 52, 35, 12]
1 ((c, aa), (d,)) [4424, 512]

l = df['key'].str.len()
df['key_count'] = l
df['value_count'] = df['value'].str.len() / l
df['key'] = df['key'].mask(l == 1, df['key'].apply(tuple))
df['value'] = df['value'].apply(tuple)
print (df)
key value key_count value_count
0 ((aa, bbbb), (c,)) (1, 52, 35, 12) 2 2.0
1 ((c, aa), (d,)) (4424, 512) 2 1.0

关于python - 有效地将具有元组键和列表值的字典转换为 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44044753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com