Pandas中使用loc将列表等集合赋值给行或列的每一个元素

0.背景

在使用Pandas进行数据处理过程当中,有时候需要将数据的某一列都赋值为某一个列表的形式。但是如果列的元素个数与列表的元素个数相同时赋值,会导致列表中的每一个元素对应到了列的一个表格中(详情见下)。本文即解决这样的问题。

1.对应赋值

import pandas as pd
import numpy as np

data = pd.DataFrame({"A":np.arange(5), "B": list("abcde")})
myList = ('w', 'j')
data.head()

# 原始数据
# A	B
# 0	0	a
# 1	1	b
# 2	2	c
# 3	3	d
# 4	4	e

# 每个单元格对应列表中的一个元素
data.loc[data.A >= 2, 'A'] = ('P', 'P', 'P')
data.head()

# 	A	B
# 0	0	a
# 1	1	b
# 2	P	c
# 3	P	d
# 4	P	e

在这种情况下,如果这一列元素的个数和列表中元素的个数不相符,会报出ValueError: Must have equal len keys and value when setting with an iterable

2.赋值一个列表,使用frozenset(仅适用于不包含重复元素的情况),因为set会去除重复元素。

data.loc[data.A == 'P', 'A'] = frozenset((1,2,3))
data.head()

# 	A	B
# 0	0	a
# 1	1	b
# 2	(1, 2, 3)	c
# 3	(1, 2, 3)	d
# 4	(1, 2, 3)	e

frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

class frozenset([iterable])
参数:
iterable -- 可迭代的对象,比如列表、字典、元组等等。
返回值:
返回新的 frozenset 对象,如果不提供任何参数,默认会生成空集合。

更多关于frozenset,参见:http://www.runoob.com/python/python-func-frozenset.html

3.更好的方法

最好将list或者tuple转换成字符串,然后后续利用进行分割处理。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值