如何修复:只能使用带有字符串值的 .str 访问器


使用Python时可能会遇到的错误是:

 AttributeError : Can only use .str accessor with string values!

当您尝试替换 pandas DataFrame 的字符串列中的模式,但您正在使用的列实际上不是字符串时,通常会发生此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们有以下 pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' points ': [6.5, 7.8, 8.0, 9.0, 7.5, 3.4, 6.6, 6.8],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
df

	team points assists rebounds
0 A 6.5 5 11
1 A 7.8 7 8
2 A 8.0 7 10
3 A 9.0 9 6
4 B 7.5 12 6
5 B 3.4 9 5
6 B 6.6 9 9
7 B 6.8 4 12

现在假设我们尝试用空格替换“points”列中的每个小数位:

 #attempt to replace decimal in "points" column with a blank
df[' points '] = df[' points ']. str . replace (' . ', '')

AttributeError : Can only use .str accessor with string values! 

我们收到错误,因为“points”列不是字符串列。

如何修复错误

解决此错误的最简单方法是在尝试替换“points”列中的值之前使用.astype(str)函数:

 #replace decimal in "points" column with a blank
df[' points '] = df[' points ']. astype (str). str . replace (' . ', '')

#view updated DataFrame
df

	team points assists rebounds
0 A 65 5 11
1 A 78 7 8
2 A 80 7 10
3 A 90 9 6
4 B 75 12 6
5 B 34 9 5
6 B 66 9 9
7 B 68 4 12

请注意,“points”列中的每个小数位都已被替换,并且我们没有收到任何错误,因为我们在尝试替换“points”列中的值之前使用了.astype(str)函数。

注意:您可以在此处找到replace()函数的完整文档。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注