我是 Pandas 和 Numpy 的新手。我有一个数据框,我想通过对列的每一行应用一个函数来创建一个新列。让我们举一个简单的例子:
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=["names"], data=["Brussels", 2, "New York"])
def to_lower(value):
try:
return value.lower()
except AttributeError:
return None
def to_string(value):
return str(value)
df['lower_names'] = np.vectorize(to_lower)(df['names'])
这个操作效果很好。现在我想将to_string()
then the to_lower()
only 应用于结果为 None 的“lower_names”行(我不知道这是否很清楚)。
这看起来很基本,但我遇到了麻烦。我可以详细说明我的尝试,但我害怕显得白痴......也许我应该在一两周内学习这两个模块,然后再玩它们,但与此同时,欢迎任何建议。
编辑:@jezrael 解决方案是正确的...对于我的简化示例。现在让我们想象一下,我想应用该np.vectorize(to_string)
函数,然后np.vectorize(to_lower)
仅在第一个结果为 None 的“名称”列的行上应用,最好的方法是什么?
我认为您需要更改return None
为return to_string(value)
:
def to_lower(value):
try:
return value.lower()
except AttributeError:
return to_string(value)
def to_string(value):
return str(value)
df['lower_names'] = np.vectorize(to_lower)(df['names'])
print (df['lower_names'].apply(type))
0 <class 'str'>
1 <class 'str'>
2 <class 'str'>
Name: lower_names, dtype: object
也可以astype
用于将所有值转换为str
然后str.lower
:
df['lower_names'] = df['names'].astype(str).str.lower()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句