Pandas需要一个Str对象但收到一个float

时间:2018-08-23 16:26:50

标签: python string python-3.x pandas

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

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)]

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)]