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轉換成字符串,然後後續利用進行分割處理。