我希望创建一个数据帧字典,以便可以传递给函数。每个数据框只是一个单行字符串。
输入:
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'
。
不确定如何解决此问题...
答案 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]
还要注意缩进,因为循环的最后两行应该在循环之后,而不是内部
答案 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