pandas 如何将 Dataframe 列转换为键:值字符串?

lztngnrs  于 2023-01-19  发布在  其他
关注(0)|答案(3)|浏览(180)

我正在为openai模型训练准备数据集。例如,我有以下格式的csv数据

df = DataFrame({'foo':['a','b','c'], 'bar':[1, 2, 3], 'new':['apple', 'banana', 'pear']})

df
    bar foo new 
0   1   a   apple   
1   2   b   banana  
2   3   c   pear

我想创建一个名为“prompt”的新列,并将bar列和foo列的值合并

bar foo new     prompt  
0   1   a   apple   foo: a, bar: 1
1   2   b   banana  foo: b, bar: 2
2   3   c   pear    foo:c, bar: 3

有一个类似的示例here,但它没有在组合列中添加列名

enyaitl3

enyaitl31#

df.apply非常流行,但是should be avoided whenever possible
使用向量化方法,将相关列转换为dict并去掉引号:

df["prompt"] = df[["foo", "bar"]].to_dict(orient="index")
df["prompt"] = df["prompt"].astype(str).replace(r"'", "", regex=True)

#   foo  bar     new            prompt
# 0   a    1   apple  {foo: a, bar: 1}
# 1   b    2  banana  {foo: b, bar: 2}
# 2   c    3    pear  {foo: c, bar: 3}

注意你的评论中有大括号,但你的文章没有,如果你还想去掉大括号,把它们加到正则表达式中:

df["prompt"] = df["prompt"].astype(str).replace(r"[{'}]", "", regex=True)

#   foo  bar     new          prompt
# 0   a    1   apple  foo: a, bar: 1
# 1   b    2  banana  foo: b, bar: 2
# 2   c    3    pear  foo: c, bar: 3

详细信息

首先转换按索引定向的相关列to_dict

df["prompt"] = df[["foo", "bar"]].to_dict(orient="index")

#   foo  bar     new                  prompt
# 0   a    1   apple  {'foo': 'a', 'bar': 1}
# 1   b    2  banana  {'foo': 'b', 'bar': 2}
# 2   c    3    pear  {'foo': 'c', 'bar': 3}

然后使用astype将其转换为str类型,并使用replace转换dict符号:

df["prompt"] = df["prompt"].astype(str).replace(r"[{'}]", "", regex=True)

#   foo  bar     new          prompt
# 0   a    1   apple  foo: a, bar: 1
# 1   b    2  banana  foo: b, bar: 2
# 2   c    3    pear  foo: c, bar: 3
ndh0cuux

ndh0cuux2#

df = pd.DataFrame({'foo':['a','b','c'], 'bar':[1, 2, 3], 'new':['apple', 'banana', 'pear']})
df['prompt'] = df.apply(lambda x: x.to_json(), axis=1)
df

这会有用吗?你会得到:

foo bar new     prompt
0   a   1   apple   {"foo":"a","bar":1,"new":"apple"}
1   b   2   banana  {"foo":"b","bar":2,"new":"banana"}
2   c   3   pear    {"foo":"c","bar":3,"new":"pear"}
bksxznpy

bksxznpy3#

使用applylambda合并一行中的多个单元格

df['prompt']=df.apply(lambda k: 'foo: ' + k['foo'] + ', bar: ' + str(k['bar']), axis=1)

这样行吗

foo  bar     new          prompt
0   a    1   apple  foo: a, bar: 1
1   b    2  banana  foo: b, bar: 2
2   c    3    pear  foo: c, bar: 3

相关问题