首页 > 解决方案 > Pandas 需要一个 Str 对象但收到一个浮点数

问题描述

我有一个看起来像这样的数据框:

df_all_data:

                                      everything    file_names

0                                              v_merged.sql
1                   CREATE VIEW [dbo].[v_merged]  v_merged.sql
2                                             AS  v_merged.sql
3                                WITH [stage] AS  v_merged.sql
4                                              (  v_merged.sql
5                                 SELECT --[row]  v_merged.sql
6                          [fssa_legacysystemid]  v_merged.sql
7                                        ,[A_ID]  v_merged.sql
8                                  ,[vendorcode]  v_merged.sql
9                           ,NULL AS [lpinumber]  v_merged.sql

我收到以下错误:

TypeError: ("descriptor 'startswith' requires a 'str' object but received a 'float'", 'occurred at index everything')

我不确定我做错了什么?我以为我的一切列是一个strobject类型?

编辑#1:

这是导致此错误的代码:

df_all_data = df_all_data[~df_all_data.applymap(lambda x : str.startswith(x,'--')).any(1)]

标签: pythonstringpython-3.xpandas

解决方案


既然 Pandas 已经找到float了价值,那么它很有可能是真的。这些值可能为空,即NaN/ np.nanstr一种简单的解决方法是在您的 lambda 函数中转换为:

df = df[~df.applymap(lambda x: str.startswith(str(x), '--')).any(1)]

一个更好的主意是转换为strviapd.DataFrame.astype和 usepd.Series.str方法,它们完全模仿 Python 字符串方法:

df = df[df.astype(str).str.startswith('--').any(1)]

推荐阅读