使用lambda的字典中特定键的值?
Value of specific key from a dictionary using lambda?
我有一个产品数组,如下所示 table:
+---------------------------+--------------------------------+--------------------------------+
| name | review | word_count |
+---------------------------+--------------------------------+--------------------------------+
| | | {'and': 5, 'wipes': 1, |
| Planetwise | These flannel wipes are OK, | 'stink': 1, 'because' : 2, ... |
| Flannel Wipes | but in my opinion ... | |
| | | |
+---------------------------+--------------------------------+--------------------------------+
| | | {'and': 3, 'love': 1, |
| Planetwise | it came early and was not | 'it': 2, 'highly': 1, ... |
| Wipes Pouch | disappointed. i love ... | |
| | | |
+---------------------------+--------------------------------+--------------------------------+
| | | {'shop': 1, 'noble': 1, |
| | | 'is': 1, 'it': 1, 'as': ... |
| A Tale of Baby's Days | Lovely book, it's bound | |
| with Peter Rabbit ... | tightly so you may no ... | |
| | | |
+---------------------------+--------------------------------+--------------------------------+
基本上 word_count
列包含 dictionary(key : value)
个单词出现 review
列句子。
现在我想建立一个新的列名称 and
,它应该包含 word_count
字典中 and
的值,如果 and
作为键存在于 word_count
列,然后是值,如果它不作为键存在,那么 0
.
对于前 3 行,新的 and
列看起来像这样:
+------------+
| and |
+------------+
| |
| 5 |
| |
| |
+------------+
| |
| 3 |
| |
| |
+------------+
| |
| 0 |
| |
| |
+------------+
我写了这段代码,它运行正常:
def wordcount(x):
if 'and' in x:
return x['and']
else:
return 0
products['and'] = products['word_count'].apply(wordcount);
我的问题:有什么方法可以使用 lambda
来做到这一点?
到目前为止我所做的是:
products['and'] = products['word_count'].apply(lambda x : 'and' in x.keys());
这 returns 列中只有 0
或 1
。我可以在上面的行中添加什么,以便 products['and']
在 products['word_count']
中作为键存在时包含 and
键的值?
我正在使用 ipython notebook 和 graphlab。
你的想法是对的。只是 return x['and']
的值(如果存在),否则 0
。
例如:
data = {"word_count":[{"foo":1, "and":5},
{"foo":1}]}
df = pd.DataFrame(data)
df.word_count.apply(lambda x: x['and'] if 'and' in x.keys() else 0)
输出:
0 5
1 0
Name: word_count, dtype: int64
我不确定 products['word_count'].apply(wordcount)
做了什么,但从你的问题的其余部分来看,虽然你 可以 使用 [=13= 做类似下面的事情]:
products['and'] = (
lambda p: p['and']['and'] if 'and' in p['and'] else 0)(products)
它有点丑陋和笨拙,所以我建议改用内置字典 get()
方法,因为它经过调试、更短、更易于维护且速度更快:
products['and'] = products['and'].get('and', 0)
你对使用 lambda
的执着让我想起了一些人所说的 Law of the Instrument:“......如果你拥有的唯一工具是锤子,那么你很想把一切都当作如果它是一颗钉子的话。
我有一个产品数组,如下所示 table:
+---------------------------+--------------------------------+--------------------------------+ | name | review | word_count | +---------------------------+--------------------------------+--------------------------------+ | | | {'and': 5, 'wipes': 1, | | Planetwise | These flannel wipes are OK, | 'stink': 1, 'because' : 2, ... | | Flannel Wipes | but in my opinion ... | | | | | | +---------------------------+--------------------------------+--------------------------------+ | | | {'and': 3, 'love': 1, | | Planetwise | it came early and was not | 'it': 2, 'highly': 1, ... | | Wipes Pouch | disappointed. i love ... | | | | | | +---------------------------+--------------------------------+--------------------------------+ | | | {'shop': 1, 'noble': 1, | | | | 'is': 1, 'it': 1, 'as': ... | | A Tale of Baby's Days | Lovely book, it's bound | | | with Peter Rabbit ... | tightly so you may no ... | | | | | | +---------------------------+--------------------------------+--------------------------------+
基本上 word_count
列包含 dictionary(key : value)
个单词出现 review
列句子。
现在我想建立一个新的列名称 and
,它应该包含 word_count
字典中 and
的值,如果 and
作为键存在于 word_count
列,然后是值,如果它不作为键存在,那么 0
.
对于前 3 行,新的 and
列看起来像这样:
+------------+
| and |
+------------+
| |
| 5 |
| |
| |
+------------+
| |
| 3 |
| |
| |
+------------+
| |
| 0 |
| |
| |
+------------+
我写了这段代码,它运行正常:
def wordcount(x):
if 'and' in x:
return x['and']
else:
return 0
products['and'] = products['word_count'].apply(wordcount);
我的问题:有什么方法可以使用 lambda
来做到这一点?
到目前为止我所做的是:
products['and'] = products['word_count'].apply(lambda x : 'and' in x.keys());
这 returns 列中只有 0
或 1
。我可以在上面的行中添加什么,以便 products['and']
在 products['word_count']
中作为键存在时包含 and
键的值?
我正在使用 ipython notebook 和 graphlab。
你的想法是对的。只是 return x['and']
的值(如果存在),否则 0
。
例如:
data = {"word_count":[{"foo":1, "and":5},
{"foo":1}]}
df = pd.DataFrame(data)
df.word_count.apply(lambda x: x['and'] if 'and' in x.keys() else 0)
输出:
0 5
1 0
Name: word_count, dtype: int64
我不确定 products['word_count'].apply(wordcount)
做了什么,但从你的问题的其余部分来看,虽然你 可以 使用 [=13= 做类似下面的事情]:
products['and'] = (
lambda p: p['and']['and'] if 'and' in p['and'] else 0)(products)
它有点丑陋和笨拙,所以我建议改用内置字典 get()
方法,因为它经过调试、更短、更易于维护且速度更快:
products['and'] = products['and'].get('and', 0)
你对使用 lambda
的执着让我想起了一些人所说的 Law of the Instrument:“......如果你拥有的唯一工具是锤子,那么你很想把一切都当作如果它是一颗钉子的话。