我有一个看起来像这样的数据框:
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')
我不确定自己在做什么错?我以为我的所有列都是str
或object
类型?
编辑#1:
这是导致此错误的代码:
df_all_data = df_all_data[~df_all_data.applymap(lambda x : str.startswith(x,'--')).any(1)]
答案 0 :(得分:1)
由于熊猫发现了float
个值,所以很有可能是真的。这些值可能为空,即NaN
/ np.nan
。一种简单的解决方法是在您的lambda函数中转换为str
:
df = df[~df.applymap(lambda x: str.startswith(str(x), '--')).any(1)]
一个更好的主意是通过pd.DataFrame.astype
转换为str
并使用pd.Series.str
方法,它们精确地模仿Python字符串方法:
df = df[df.astype(str).str.startswith('--').any(1)]