我是编码的初学者,由于这是一个非常简单的问题,所以我知道那里一定有答案。但是,我已经搜索了大约半小时,在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有关。为什么大熊猫不让我将其分配为列表?
非常感谢您的帮助和解释。
答案 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
","
重写列s
df=df.assign(hobbies_stringsnes=[x])
束缚在一起
df=df.assign(hobbies_stringsnes=[df.hobbiesStrings.str.replace('((\,\s))','","').values.tolist()])
df
输出
答案 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']