У меня есть dataframe, который выглядит так:
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)]
Так как Pandas обнаружил float
значения, у него есть хороший шанс. Может быть, эти значения равны нулю, т.е. NaN
/np.nan
. Одним простым способом является преобразование в str
в вашей лямбда-функции:
df = df[~df.applymap(lambda x: str.startswith(str(x), '--')).any(1)]
pd.DataFrame.astype
идеей было бы преобразовать в str
через pd.DataFrame.astype
и использовать методы pd.Series.str
, которые имитируют точно строковые методы Python:
df = df[df.astype(str).str.startswith('--').any(1)]
NaN
. Попробуйтеdf_all_data = df_all_data.fillna('')
использоватьdf_all_data = df_all_data.fillna('')