如何用熊猫列表替换数据框架中的一部分字符串?

时间:2020-04-22 03:52:15

标签: python pandas dataframe

我是编码的初学者,由于这是一个非常简单的问题,所以我知道那里一定有答案。但是,我已经搜索了大约半小时,在google中键入了无数查询,而所有查询都飞到了我头上。

让我们说我有一个数据框,其中有“名称”,“爱好”列和2个人,所以有2行。目前,我的爱好是字符串,形式为“ 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键和值。我不明白为什么如果我将hobbies_as_string作为副本,我能够将hobbies列分配为列表没有问题。我还可以将df.iloc [0,-2]分配为字符串,例如“ Hey”,并且工作正常。我猜想它与ValueError有关。为什么大熊猫不让我将其分配为列表?

非常感谢您的帮助和解释。

3 个答案:

答案 0 :(得分:0)

您是否要apply每行split到列表中的每个值?

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的大手笔,那么可以对整列进行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]

答案 1 :(得分:0)

另一种方式

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

答案 2 :(得分:0)

使用“ 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']