如何用pandas中的列表替换作为数据帧一部分的字符串?

2024-10-04 03:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一名编码初学者,因为这是一个非常简单的问题,我知道一定有答案。然而,我已经搜索了大约半个小时,在谷歌上输入了无数的查询,所有的一切都在我的脑海中飞过

假设我有一个数据框,其中有“姓名”、“爱好”列和两个人,所以有两行。目前,我的业余爱好是“hobby1,hobby2”形式的弦乐。我想把这个改成[“hobby1”,“hobby2”]

hobbies_as_string = df.iloc[0, 2]
hobbies_as_list = hobbies_as_string.split(',')
df.iloc[0, -2] = hobbies_as_list

但是,这属于一个错误,ValueError:当使用iterable设置时,必须具有相等的len键和值。我不明白为什么如果我把业余爱好作为字符串复制,我就可以把业余爱好列作为列表分配,没有问题。我还可以将df.iloc[0,-2]指定为一个字符串,例如“Hey”,这很好。我想这和错误有关。为什么熊猫不让我把它列为一个列表

非常感谢您的帮助和解释


Tags: 字符串答案编码df列表stringas错误
3条回答

您是否希望apply按行将每个值放入列表中

import pandas as pd
df = pd.DataFrame({'Name' : ['John', 'Kate'],
              'Hobbies' : ["Hobby1, Hobby2", "Hobby2, Hobby3"]})
df['Hobbies'] = df['Hobbies'].apply(lambda x: x.split(','))
df

或者,如果您不是一个大的lambda exer,那么您可以对整个列执行str.split(),这更容易:

import pandas as pd
df = pd.DataFrame({'Name' : ['John', 'Kate'],
              'Hobbies' : ["Hobby1, Hobby2", "Hobby2, Hobby3"]})
df['Hobbies'] = df['Hobbies'].str.split(",")
df

输出:

    Name    Hobbies
0   John    [Hobby1, Hobby2]
1   Kate    [Hobby2, Hobby3]

使用“at”方法将值替换为列表

import pandas as pd
# create a dataframe
df = pd.DataFrame(data={'Name': ['Stinky', 'Lou'], 
                        'Hobbies': ['Shooting Sports', 'Poker']})
# replace Lous hobby of poker with a list of degen hobbies with the at method
df.at[1, 'Hobbies'] = ['Poker', 'Ponies', 'Dice']

另一种方法

df=pd.DataFrame({'hobbiesStrings':['"hobby1, hobby2"']})
df

","替换、空格,并将hobbiesStrings值放入列表中

x=df.hobbiesStrings.str.replace('((?<=)(\,\s+)+)','","').values.tolist()

x

这里我使用正则表达式 基本上,我用","替换comma \,后面的空格\s

使用df.assign重写列s

df=df.assign(hobbies_stringsnes=[x])

拴在一起

 df=df.assign(hobbies_stringsnes=[df.hobbiesStrings.str.replace('((\,\s))','","').values.tolist()])
df

输出

enter image description here

相关问题 更多 >