替换熊猫数据框中的列表元素
Posted
技术标签:
【中文标题】替换熊猫数据框中的列表元素【英文标题】:Replace list element in pandas dataframe 【发布时间】:2018-10-23 16:11:10 【问题描述】:df=pd.DataFrame("a":[1,2,3,[4,5],["apple","pear"]])
df.replace([4,5]:4.5)
df.replace(["apple","pear"]:"apple")
这里我得到了 TypeError。我要替换特定的列表,要替换的列表和用来替换列表的对象之间没有任何规定。
【问题讨论】:
【参考方案1】:我遇到了类似的问题,因为我列在列中的地方需要标准化。首先,我尝试将列表作为键,将标准词作为值,这当然失败了。因此,我创建了一个函数,将列表中的值扩展为键,并将标准词分配为所有它们的值:
def list_to_dict(cities):
new_dict =
for key in cities:
value = cities[key]
for item in value:
new_dict[item] = key
return new_dict
有了这个,我必须清理这个旨在用西班牙语表示墨西哥城的单词列表(当然我的集合更大,用于更多地方,但这是一个说明性的子组):
ciudades = list_to_dict('Ciudad De Mexico' : ['Ciudad De México', 'Cuajimalpa De Morelos', 'Mexicocity', 'Ciudad De Mexico', 'Miguel Hidalgo, Cdmx', 'Df', 'Cmx', 'Ciudad De M', 'Cdmx', 'Ciudad De M?Xico', 'C.D. M.X,', 'Mx-Cdm', 'Cuidad De Mexico', 'Dif', 'D.F.', 'D.F', 'DF', 'Distrito', 'Mexico City', 'Coyoacan', 'Mx-Cdm', 'Cdmex', 'Mx-Dif', 'Mexico Df', 'Ciudad_De_M']
导致:
【讨论】:
【参考方案2】:有一种方法可以使用astype
,即使它有效,但我仍然强烈建议您使用cold's answer.
df.astype(str).replace('[4, 5]':4.5,"['apple', 'pear']":"apple")
Out[159]:
a
0 1
1 2
2 3
3 4.5
4 apple
【讨论】:
是的......我想过这个,但错误的范围太大(引用问题等)。 最后,它将所有项目转换为 str,甚至是数字项目;-) @cᴏʟᴅsᴘᴇᴇᴅ 是的,这就是为什么我认为您的回答是此类问题的正确方法【参考方案3】:这不是一个微不足道的问题,因为 DataFrame 并非设计用于处理可变对象,如列表、集合或字典。
您可以确定匹配的索引并相应地替换。
m = [v == [4, 5] for v in df['a']]
df.loc[m, 'a'] = 4.5
df
a
0 1
1 2
2 3
3 4.5
4 [apple, pear]
['apple', 'pair']
的过程类似。如果你愿意,你可以从中形成一个函数:
def replace(df, col, key, val):
m = [v == key for v in df[col]]
df.loc[m, col] = val
replace(df, 'a', [4, 5], 4.5)
replace(df, 'a', ['apple', 'pear'], 'apple')
df
a
0 1
1 2
2 3
3 4.5
4 apple
注意:该功能就地工作。
【讨论】:
以上是关于替换熊猫数据框中的列表元素的主要内容,如果未能解决你的问题,请参考以下文章