【发布时间】:2017-11-15 02:01:09
【问题描述】:
我使用 Python Pandas 将数据存储为数据框。在这些列中,我有一个“产品”列,其中包含品牌名称和型号(例如 Nike Air Jordan、Adidas Gazelle)。我想创建一个只包含品牌(例如 Nike、Adidas)的新列,稍后我将在 groupby 中使用它来汇总数据。 根据我的研究,我相信 contains 和 regex 可以用来做到这一点。但是,实施并没有奏效。我还看到了不同的方法,一些使用“for i in range”,而另一些则在一行代码中使用它作为替换。
import pandas as pd
import numpy as np
shoes_df = pd.DataFrame({'Product':['Nike vaporfly', 'Nike Jordans', 'Adidas supernova', 'Asics Kayano', 'Asics GT2010', 'Adidas gazelle', 'Nike air max',
'Nike Lebron'], 'Unit sales':[1500, 1600,
2341, 1345, 4523, 2345, 1634, 3129]})
shoes_df['Brand'] = np.where(shoes_df['Product'].str.contains('Nike.*|Adidas.*').any(), 'Nike|Adidas', np.nan)
print(shoes_df)
这是我尝试使用“for i in range”的方法,但也没有用。在这里,我收到错误“TypeError:'Series' 对象是可变的,因此它们不能被散列”
shoes_df = pd.DataFrame({'Product':['Nike vaporfly', 'Nike Jordans', 'Adidas supernova', 'Asics Kayano', 'Asics GT2010', 'Adidas gazelle', 'Nike air max',
'Nike Lebron'], 'Unit sales':[1500, 1600, 2341, 1345, 4523,
2345, 1634, 3129]})
for i in shoes_df.iterrows():
if shoes_df['Product'].str.contains('Nike').any():
shoes_df.set_value(i, 'Brand', 'Nike')
elif shoes_df['Product'].str.contains('Adidas').any():
shoes_df.set_value(i, 'Brand', 'Adidas')
elif shoes_df['Product'].str.contains('Asics').any():
shoes_df.set_value(i, 'Brand', 'Asics')
else:
shoes_df.set_value(i, 'Brand', np.nan)
【问题讨论】: