我有一個數據框,其中包含具有不同名稱的一列。我從這些名字中提取功能並將它們存儲到字典中。然後,我想爲每個功能創建一個列,併爲每個名稱存儲值。我努力讓自己的循環正確。熊貓:循環遍歷每一行,提取特徵並創建新列
我的代碼:
import pandas as pd
data = pd.DataFrame(['Mike', 'Ester', 'Sarah'])
data.columns = ['name']
def get_features(name):
features = {}
features["firstletter"] = name[0].lower()
features["lastletter"] = name[-1].lower()
return features
for name in data['name']:
features = get_features(name)
print features
for f,v in features.items():
data[f] = v
data.head()
我得到:
name lastletter firstletter
0 Mike h s
1 Ester h s
2 Sarah h s
我需要:
name lastletter firstletter
0 Mike e m
1 Ester r e
2 Sarah h s
我明白爲什麼所有的名字得到姓氏值,但我想不出如何解決它。我可能會先爲所有功能創建新的標題,然後更新我的數據框,但我希望有一個更明智的方法。將感謝您的幫助!
編輯:我的功能比第一個/最後一個字母複雜得多。它含有大約20種不同的功能,所以我真的需要建立一個字典...
def get_features(name):
features = {}
features["firstletter"] = name[0].lower()
features["lastletter"] = name[-1].lower()
features["hythen"] = ("-" in name.lower())
features["suffix"] = name[-2:].lower()
features["prefix"] = name[0:2].lower()
features["length"] = len(name)
for letter in 'abcdefghijklmnopqrstuvwxyz':
features["count(%s)" % letter] = name.lower().count(letter)
features["has(%s)" % letter] = (letter in name.lower())
return features
答案已經更新。 – piRSquared