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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章