如何将Python变量组合成单行数据框?

问题描述 投票:0回答:2

我有一个空数据框:

dfObj = pd.DataFrame(columns=['combo', 'item1', 'item2', 'group1', 'group2', 'category1', 'category2', 'title1', 'title2'])

然后我将这些值放在单独的变量中:

combo = 'A | B|'
item1 = 'A'
item2 = 'B'
group1 = 'phones'
group2 = 'cases'
cat1 = 'smartphones'
cat2 = 'leather cases'
title1 = 'Samsung galaxy S9+'
title2 = 'Casey for S9+'

我想以某种方式获得一个数据帧行,稍后我可以将其附加到我的数据帧中。现在我正在经历一个 for 循环并使用

.iloc[]
将值放入特定位置,但是有没有更优化的方法..?

python pandas dataframe
2个回答
2
投票

创建变量列表,在循环中分配给嵌套列表,最后传递给

DataFrame
构造函数一次:

L = [combo, item1, item2, group1, group2, cat1, cat2, title1, title2]
cols = ['combo', 'item1', 'item2', 'group1', 'group2', 
        'category1', 'category2', 'title1', 'title2']

#simulate loop
out = []
for i in range(2):
    out.append(L)

dfObj = pd.DataFrame(out, columns=cols)
print (dfObj)
    combo item1 item2  group1 group2    category1      category2  \
0  A | B|     A     B  phones  cases  smartphones  leather cases   
1  A | B|     A     B  phones  cases  smartphones  leather cases   

               title1         title2  
0  Samsung galaxy S9+  Casey for S9+  
1  Samsung galaxy S9+  Casey for S9+  

另一个解决方案是创建字典:

d = {'combo': combo, 'item1': item1, 'item2': item2, 'group1': group1, 
     'group2': group2, 'category1': cat1, 'category2': cat2, 
     'title1': title1, 'title2': title2}
print (d)

out = []
for i in range(2):
    out.append(d)

dfObj = pd.DataFrame(out)
print (dfObj)
     category1      category2   combo  group1 group2 item1 item2  \
0  smartphones  leather cases  A | B|  phones  cases     A     B   
1  smartphones  leather cases  A | B|  phones  cases     A     B   

               title1         title2  
0  Samsung galaxy S9+  Casey for S9+  
1  Samsung galaxy S9+  Casey for S9+  

0
投票
data='''
combo = 'A | B|'
item1 = 'A'
item2 = 'B'
group1 = 'phones'
group2 = 'cases'
cat1 = 'smartphones'
cat2 = 'leather cases'
title1 = 'Samsung galaxy S9+'
title2 = 'Casey for S9+'

'''
df1=pd.read_csv(io.StringIO(data),sep='\s{2,}',dtype=None,names=['col1'])
pd.Series(eval("dict({})".format(df1.agg(','.join).squeeze()))).to_frame().T



   combo item1 item2  group1 group2         cat1           cat2  \
0  A | B|     A     B  phones  cases  smartphones  leather cases   

               title1         title2  
0  Samsung galaxy S9+  Casey for S9+
© www.soinside.com 2019 - 2024. All rights reserved.