开发者问题收集

在 Pandas 中应用方法显示错误的数据类型

2021-06-02
985

在 StackOverflow 数据集上使用 apply() 方法时,我收到错误。我试图在“HOBBYIST”列中找到每个回复的长度。我使用的代码是:

result = pd. read_csv ("survey_results_public.csv")
result ["HOBBYIST"]. apply (len)

我收到的错误是: TypeError:类型为“float”的对象没有 len()

尽管“HOBBYIST”列中的数据仅包含“是”和“否”(以及一些 Null 值),这显然不是浮点数据类型。

后来我将代码更改为:

result ["HOBBYIST"]. astype (str). apply (len)

这显示了正确的结果,但为什么 apply 方法将“是”和“否”等值视为浮点数据类型?

2个回答

您可以阻止 pandas.read_csv() 推断某些列的数据类型。

result = pd.read_csv("survey_results_public.csv", dtype={"HOBBYIST": str})
Corralien
2021-06-02

您还可以删除所有 Null 记录以防止出现此类问题。以下是示例

#import library
import pandas as pd

#sample data
result = pd.DataFrame({'name': ['Ivan','John','Shaun'],'HOBBYIST':['Yes',None,'No']})
result

Result Dataset with Null data

    name    HOBBYIST
0   Ivan    Yes
1   John    None
2   Shaun   No

使用 dropna() 方法,我们可以省略所有 Null 记录,如下所示

#removing or dropping all null records
result = result.dropna()
result

Resulting Dataset without Null Records

    name    HOBBYIST
0   Ivan    Yes
2   Shaun   No

现在您可以在 apply() 函数上执行 len。

df["HOBBYIST"].apply(len)

Result

0    3
Name: HOBBYIST, dtype: int64

注意 。确保您指定的列是字符串类型。除非最好将列转换为字符串类型,如上述答案所示。

Littin Rajan
2021-06-02