объект «float» не имеет атрибута «что-то» ошибка

#python #pandas #dataframe

Вопрос:

 df = pd.DataFrame({'a': ['Anakin Ana', 'Anakin Ana, Chris Cannon', 'Chris Cannon', 'Bella Bold'],  'b': ['Bella Bold, Chris Cannon', 'Donald Deakon', 'Bella Bold', 'Bella Bold'],  'c': ['Chris Cannon', 'Chris Cannon, Donald Deakon', 'Chris Cannon', 'Anakin Ana, Bella Bold']},  index=[0, 1, 2])  

Всем привет,

Я пытаюсь подсчитать, сколько общих имен в каждой колонке. Выше приведен пример того, как выглядят мои данные. Сначала он сказал, что объект «float» не имеет ошибки «разделения» атрибута. Я провел некоторый поиск, и, похоже, ошибка связана с моими отсутствующими данными, которые считываются как плавающие. Но даже когда я изменяю столбец в строковой переменной, он продолжает получать ошибку. Ниже приведен мой код.

  import pandas as pd import csv filepath = "C:/Users/data/Untitled Folder/creditdata2.csv" df = pd.read_csv(filepath,encoding='utf-8')   df['word_overlap'] = [set(x[8].astype(str).split(",")) amp; set(x[10].astype(str).split(",")) for x in df.values] df['overlap_count'] = df['word_overlap'].str.len()  df.to_csv('creditdata3.csv',mode='a',index=False)   

И вот в чем ошибка

 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) lt;ipython-input-21-b85ac8637aaegt; in lt;modulegt;  4 df = pd.read_csv(filepath,encoding='utf-8')  5  ----gt; 6 df['word_overlap'] = [set(x[8].astype(str).split(",")) amp; set(x[10].astype(str).split(",")) for x in df.values]  7 df['overlap_count'] = df['word_overlap'].str.len()  8   lt;ipython-input-21-b85ac8637aaegt; in lt;listcompgt;(.0)  4 df = pd.read_csv(filepath,encoding='utf-8')  5  ----gt; 6 df['word_overlap'] = [set(x[8].astype(str).split(",")) amp; set(x[10].astype(str).split(",")) for x in df.values]  7 df['overlap_count'] = df['word_overlap'].str.len()  8   AttributeError: 'float' object has no attribute 'astype'  

Комментарии:

1. Можете ли вы более четко определить, «сколько общих имен в каждом столбце», или привести пример того, какими должны быть выходные данные?

2. Привет, так что, например, между первой ячейкой столбцов 1 и 2 нет общего имени, поэтому оно будет равно 0. Однако 4-я ячейка столбцов 1 и 2 имеет общее название «Белла Болд», поэтому она будет 1.

Ответ №1:

astype это метод в DataFrame , и здесь у вас просто примитивный float тип, потому что вы уже проиндексировали x .

Попробуй это:

 df['word_overlap'] = [set(str(x[8]).split(",")) amp; set(str(x[10]).split(",")) for x in df.values]  

Комментарии:

1. Большое тебе спасибо, тромги! теперь у него нет ошибки float, но вывод дурацкий….. Результат «overlap_count» состоит только из 1 и 0….

Ответ №2:

 import pandas as pd import csv  filepath = "C:/data/Untitled Folder/creditdata2.csv" df = pd.read_csv(filepath,encoding='utf-8')   def f(columns):  f_desc, f_def = str(columns[6]), str(columns[7])  common = set(f_desc.split(",")).intersection(set(f_def.split(",")))  return common, len(common)  df[['word_overlap', 'word_count']] = df.apply(f, axis=1, raw=True).apply(pd.Series) df.to_csv('creditdata3.csv',mode='a',index=False)  

Я нашел другой способ сделать это, спасибо вам всем!