通过for循环创建数据帧字典

时间:2020-10-05 09:39:24

标签: python pandas

我希望创建一个数据帧字典,以便可以传递给函数。每个数据框只是一个单行字符串。

输入:

test1=['1','2']
dn=['x','y']
Mag =['tet1','tet2']
pm=['1','2'] 

keys=[]
final_list=[]
df = pd.DataFrame()

for num1 in test1:
    for num2 in dn:
        for num3 in Mag:
            for num4 in pm:
                keys.append(f'sw{num4}O{num1}{num2}{num3}')
                final_list.append(f'mp{num4}-ghfg{num1}-{num2}-{num3}')
                df=pd.DataFrame(final_list)
                df.append(df)

d = {}
d= dict(zip(keys, df))

输出:

d['sw1O1xtet1']

0

所需的输出:一个数据帧,包含与其关键字对应的单行字符串'mp1-ghfg1-x-tet1'。 不确定如何解决此问题...

3 个答案:

答案 0 :(得分:1)

以下代码段将为您提供所需的输出。

import pandas as pd
test1=['1','2']
dn=['x','y']
Mag =['tet1','tet2']
pm=['1','2'] 

keys=[]
final_list=[]

for num1 in test1:
    for num2 in dn:
        for num3 in Mag:
            for num4 in pm:
                keys.append(f'sw{num4}O{num1}{num2}{num3}')
                final_list.append(f'mp{num4}-ghfg{num1}-{num2}-{num3}')

d = {}
d = dict(zip(keys, final_list))

print(d['sw1O1xtet1'])

答案 1 :(得分:1)

为了了解您的代码出了什么问题,您可以看一下zip的结果

>>> [(a,b) for (a,b) in zip(keys, df)]
[('sw1O1xtet1', 0)]

因此,您不应将整个数据框传递给zip,而应仅将第一列df[0]

传递给zip

还要注意缩进,因为循环的最后两行应该在循环之后,而不是内部

答案 2 :(得分:0)

您可以在将每个值添加到字典之前将其放入数据框中。如果您直接通过添加键值对来构造字典,则不需要中间列表:

test1 = ['1', '2']
dn = ['x', 'y']
Mag = ['tet1', 'tet2']
pm = ['1', '2'] 

d = {}

for num1 in test1:
    for num2 in dn:
        for num3 in Mag:
            for num4 in pm:
                key = f'sw{num4}O{num1}{num2}{num3}'
                value = pd.DataFrame({'col1': [f'mp{num4}-ghfg{num1}-{num2}-{num3}']})
                d[key] = value