Python 匹配字符串时出错

Python 匹配字符串时出错,python,string,pandas,Python,String,Pandas,我有下面的SampleDf数据。我试图检查数据帧中一列中的值,看看它们是否包含“sum”、“count”或“Avg”,然后创建一个值为“sum”、“count”或“Avg”的新列。当我在真实的数据帧上运行下面的代码时,我得到了下面的错误。当我在真实数据帧上运行数据类型时,它会说所有列都是对象。下面的代码与下面的帖子相关。不幸的是,当我在我提供的SampleDf上运行代码时,我没有得到相同的错误,但是我无法发布我的整个数据帧 职位: 代码: SampleDf=pd.DataFrame([['to

我有下面的SampleDf数据。我试图检查数据帧中一列中的值,看看它们是否包含“sum”、“count”或“Avg”,然后创建一个值为“sum”、“count”或“Avg”的新列。当我在真实的数据帧上运行下面的代码时,我得到了下面的错误。当我在真实数据帧上运行数据类型时,它会说所有列都是对象。下面的代码与下面的帖子相关。不幸的是,当我在我提供的SampleDf上运行代码时,我没有得到相同的错误,但是我无法发布我的整个数据帧

职位:

代码:
SampleDf=pd.DataFrame([['tom',“Avg(case when Value1 in('Value2')和[DateType]in('Value3')然后LOS end)”],['bob',“isnull(Avg(case when XferToValue2 in(1))和DateType in('Value3')和[Value1]in('HM')然后LOS end),0)”,列=['ReportField','OtherField])
搜索1='Sum'
搜索2='Count'
搜索3='Avg'
def Agg_类型(x):
如果在x中搜索1:
返回“sum”
elif search2在x中:
返回“计数”
elif在x中搜索3:
返回“平均值”
其他:
返回“其他”
SampleDf['AggType']=SampleDf['OtherField']。应用(Agg_类型)
SampleDf.head()
错误:
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
17返回“其他”
18
--->19 SampleDf['AggType']=SampleDf['OtherField']。应用(Agg_类型)
20
21#样本头()
应用程序中的C:\Users\Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\series.py(self、func、convert\u dtype、args、**kwds)
2292其他:
2293值=self.asobject
->2294 mapped=lib.map\u推断(值,f,convert=convert\u数据类型)
2295
2296如果len(映射)和isinstance(映射[0],系列):
pandas.lib.map_infere(pandas\lib.c:66124)()中的pandas\src\inference.pyx
在Agg_类型中(x)
8.
9 def Agg_类型(x):
--->10如果在x中搜索1:
11返回“总和”
12 elif搜索2在x中:
TypeError:类型为“float”的参数不可编辑
您可以尝试以下方法:

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
列中的字符串中的索引,并在这些索引中用“Avg”填充
new\u col
。对于剩下的字段(没有“Avg”的地方),您可以查找
Count
,并对
Sum
执行相同的操作

文件:


我无法用此数据重现您的错误,但如果我用浮点列表覆盖
['OtherField']
列,我可以重现错误。您的函数看起来很好-
['OtherField']的数据类型似乎有问题
column.如果我提供的解决方案有效但与您的不同,可以吗?因为您的代码没有给我带来任何错误too@RayhaneMama谢谢你回复我,是的,请提供你的解决方案。谢谢,这就是诀窍。你理解我的代码和你的代码的区别吗?我正在试图理解为什么熊猫版不起作用。我查看了数据,它似乎是字符串而不是浮动。是的,事实上,我也有几次遇到这个错误,我不知道为什么它会弹出。但是,打印df.dtypes显示我没有浮动,但是……我仍在寻找原因,不过,我会随时通知你@ndderwerdo@ndderwerdo我刚刚测试了你的代码,它是有效的,所以如果它仍然不适用于你,我认为它与你发布的代码无关。
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")))