#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)
Я нашел другой способ сделать это, спасибо вам всем!