版权声明:本文为博主在工作学习中总结而来,转载请注明出处。 https://blog.csdn.net/wj1066/article/details/81510508
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转换成字符串,然后后续利用进行分割处理。