让我通过注意组合列不是字典来为这个问题做准备。生成的数据框在'组合的'中具有方括号。列 - 所以它看起来像数据框中的列表,格式为[key1:value1,key2:value2等]。
我试图将数据框转换为:
import pandas as pd
test = pd.DataFrame({'apples':['red','green','yellow'], 'quantity':
[1,2,3],'tasteFactor':['yum','yum','yuck']})
apples quantity tasteFactor
0 red 1 yum
1 green 2 yum
2 yellow 3 yuck
采用这种格式,即将键和每行中的值组合成一个新列:
apples quantity tasteFactor combined
0 red 1 yum ['apples':'red','quantity':'1','tastefactor':'yum']
1 green 2 yum ['apples':'green','quantity':'2','tastefactor':'yum']
2 yellow 3 yuck ['apples':'yellow','quantity':'3','tastefactor':'yuck']
尝试将数据框转换为每行一个字典,但却将其转换为列表。
test['combined'] = test.to_dict(orient='records')
生成的新列不一定是实际的列表类型。它可能是一个字符串。
以前在这里提出这个问题,但想澄清这个问题标题中的问题。 How to Create a List from a Dictionary within a DataFrame in Python
找到了以下密切相关的问题,并尝试了对它们的推导,这些问题让我走了一半,但似乎无法获得完全正确的格式。
答案 0 :(得分:1)
您可以使用pandas dataframes的apply方法
import pandas as pd
df = pd.DataFrame({'apples':['red','green','yellow'], 'quantity':
[1,2,3],'tasteFactor':['yum','yum','yuck']})
col_names = df.columns
def func(row):
global col_names
list_ = [str(b)+':'+str(a) for a,b in zip(row,col_names.values.tolist())]
return list_
x = list(map(func, df.values.tolist()))
df.loc[:,'combined'] = pd.Series(x)
# df
# apples quantity tasteFactor combined
# 0 red 1 yum [apples:red, quantity:1, tasteFactor:yum]
# 1 green 2 yum [apples:green, quantity:2, tasteFactor:yum]
# 2 yellow 3 yuck [apples:yellow, quantity:3, tasteFactor:yuck]
答案 1 :(得分:1)
正如您所提到的生成的新列并不需要是实际的列表类型。
di=test.T.to_dict()
test['Mapper']=test.index
test.Mapper.map(di)
test.assign(combined=test.Mapper.map(di)).drop('Mapper',1)
Out[493]:
apples quantity tasteFactor combined
0 red 1 yum {'apples': 'red', 'quantity': 1, 'tasteFactor'...
1 green 2 yum {'apples': 'green', 'quantity': 2, 'tasteFacto...
2 yellow 3 yuck {'apples': 'yellow', 'quantity': 3, 'tasteFact...
编辑:
di=test.T.to_dict()
test['Mapper']=test.index
test.Mapper.map(di)
test=test.assign(combined=test.Mapper.map(di).astype(str)).drop('Mapper',1)
test=test.combined.str.replace('{','[').str.replace('}',']')
test.combined[0]
Out[511]: "['apples': 'red', 'quantity': 1, 'tasteFactor': 'yum']"