我的数据类似于下面的SampleDf数据。我正在尝试检查数据框中一列中的值以查看它们是否包含“sum”或“count”或“Avg”,然后创建一个值为“sum”,“count”或“Avg”的新列。当我在我的真实数据帧上运行下面的代码时,我收到以下错误。当我在我的真实数据帧上运行dtypes时,它表示所有列都是对象。以下代码与以下帖子有关。不幸的是,当我在我提供的SampleDf上运行代码时,我没有得到相同的错误,但我无法发布我的整个数据帧。
交的: Pandas and apply function to match a string
Code:
SampleDf=pd.DataFrame([['tom',"Avg(case when Value1 in ('Value2') and [DateType] in ('Value3') then LOS end)"],['bob',"isnull(Avg(case when XferToValue2 in (1) and DateType in ('Value3') and [Value1] in ('HM') then LOS end),0)"]],columns=['ReportField','OtherField'])
search1='Sum'
search2='Count'
search3='Avg'
def Agg_type(x):
if search1 in x:
return 'sum'
elif search2 in x:
return 'count'
elif search3 in x:
return 'Avg'
else:
return 'Other'
SampleDf['AggType'] = SampleDf['OtherField'].apply(Agg_type)
SampleDf.head()
Error:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-a2b4920246a7> in <module>()
17 return 'Other'
18
---> 19 SampleDf['AggType'] = SampleDf['OtherField'].apply(Agg_type)
20
21 #SampleDf.head()
C:\Users\Name\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
2292 else:
2293 values = self.asobject
-> 2294 mapped = lib.map_infer(values, f, convert=convert_dtype)
2295
2296 if len(mapped) and isinstance(mapped[0], Series):
pandas\src\inference.pyx in pandas.lib.map_infer (pandas\lib.c:66124)()
<ipython-input-17-a2b4920246a7> in Agg_type(x)
8
9 def Agg_type(x):
---> 10 if search1 in x:
11 return 'sum'
12 elif search2 in x:
TypeError: argument of type 'float' is not iterable
答案 0 :(得分:0)
你可以试试这个:
SampleDf['new_col'] = np.where(SampleDf.OtherField.str.contains("Avg"),"Avg",
np.where(SampleDf.OtherField.str.contains("Count"),"Count",
np.where(SampleDf.OtherField.str.contains("Sum"),"Sum","Nothing")))
请注意,如果您在同一个字符串中没有Avg
和Count
或Sum
,这将正常工作。
如果你这样做,请注意我,我会寻找更好的方法
当然,如果某些事情不符合您的需求,也会报告回来
希望这很有帮助
说明:
正在发生的事情是,您正在寻找Avg
列中OtherField
列中的new_col
索引,并在这些索引中填充Count
和“平均”。对于剩余的字段(没有“平均”的字段),您会查找Sum
并执行相同操作,最后对let parameters: [String : Any] = [
"names" : ["bob", "fred"]
]
Alamofire.request(urlString, method: .post, parameters: parameters, encoding: URLEncoding.default)
.responseJSON { response in
// etc
}
执行相同的操作。
文件: