【问题标题】:TypeError when trying to use Regex on Pandas Dataframe尝试在 Pandas Dataframe 上使用 Regex 时出现 TypeError
【发布时间】:2020-10-29 09:46:02
【问题描述】:

我一直在工作中进行数据清理,但仅在一个月的数据中出现此错误。我已经清理了 1 月、2 月、4 月和 5 月的所有数据。不知道为什么这个文件的工作方式与它实际上是相同的设置和所有内容不同。我一直收到这个错误,有没有人碰巧知道为什么?

代码基本上是从 Excel 表中抓取数据,并根据标题确定它是 SSD、HDD 等。

例如。标题:“DISCO SOLIDO SSD 240GB” 输出:“SSD”

它适用于我运行的所有其他文件,但是当月的数据之一不起作用。

Traceback (most recent call last):

File "__", line 55, in <module>

df['Product_Category'] = df.apply(lambda row: 'SSD' if prod_cat_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)

File "__", line 6878, in apply

return op.get_result()

File "__", line 186, in get_result

return self.apply_standard()

File "__", line 296, in apply_standard

values, self.f, axis=self.axis, dummy=dummy, labels=labels

File "pandas\_libs\reduction.pyx", line 620, in pandas._libs.reduction.compute_reduction

File "pandas\_libs\reduction.pyx", line 128, in pandas._libs.reduction.Reducer.get_result

File "C:/Users/1000266230/PycharmProjects/Excel/reg_ex.py", line 55, in <lambda>

df['Product_Category'] = df.apply(lambda row: 'SSD' if prod_cat_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)

TypeError: expected string or bytes-like object

这是我的代码:

df['Product_Category'] = '-'
df['Product_Category'] = df['Product_Category'].apply(str)

prod_cat_ssd = re.compile(r'\bSOLIDO\b|\bSSD\b|\bSóLIDO\b')
prod_cat_hdd = re.compile(r'\bDURO\b|\bRIGIDO\b|\bRíGIDO\b|\bRIGIDOS\b|\bHDD\b')
prod_cat_external_ssd = re.compile(r'\b(EXTERNO|EXTREME)\b.*\b(SOLIDO|SSD|SóLIDO)\b|\b(SOLIDO|SSD|SóLIDO)\b.*\b(EXTERNO|EXTREME)\b')
prod_cat_external_hdd = re.compile(r'\b(EXTERNO|EXTREME)\b.*\b(DURO|RIGIDO|RIGIDOS|RíGIDO|HDD)\b|\b(DURO|RIGIDO|RIGIDOS|RíGIDO|HDD)\b.*\b(EXTERNO|EXTREME)\b')
df['Product_Category'] = df.apply(lambda row: 'SSD' if prod_cat_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)
df['Product_Category'] = df.apply(lambda row: 'HDD' if prod_cat_hdd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)
df['Product_Category'] = df.apply(lambda row: 'External SSD' if prod_cat_external_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)
df['Product_Category'] = df.apply(lambda row: 'External HDD' if prod_cat_external_hdd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1)

**请不要介意西班牙语单词或特殊字符。

任何帮助将不胜感激!

【问题讨论】:

  • 我会看一下文件。您的脚本似乎在以下行 df['Product_Category'] = df.apply(lambda row: 'SSD' if prod_cat_ssd.search(row.Titulo_Publicacion) else row.Product_Category, axis=1) 上中断。为了进一步排除故障,您可以添加检查 type() 以查看 row 是否为字符串,否则您可以使用 str() 方法强制转换为字符串。

标签: python python-3.x pandas


【解决方案1】:

将 pandas 行中不是字符串的所有属性转换为字符串,例如:row.Product_Categorystr(row.Product_Category)

【讨论】:

  • 好的,我通过将 row.Titulo_Publicacion 更改为 str(row.Titulo_Publicacion) 得到了解决方案。非常感谢!
猜你喜欢
  • 2021-10-14
  • 2019-07-01
  • 1970-01-01
  • 2022-10-21
  • 2020-09-21
  • 2016-09-22
  • 2020-03-29
  • 1970-01-01
  • 2019-07-09
相关资源
最近更新 更多