Прежде всего, я не уверен, является ли это drop_duplicates()
ошибкой или нет.
Что я хочу сделать:
Импортировать файл из csv, сделать re.search
для каждой строки, если совпадает, сохранить строку в словаре, если не совпадает, сохранить строку в другом словаре. Составьте график из длины словарного значения.
Проблема
У меня есть 1000 строк внутри CSV, но результат возвращает 1200.
Мой код
import pandas as pd
import re
# import data
filename = 'sample.csv'
# save data as data
data = pd.read_csv(filename, encoding='utf-8')
# create new dictionary for word that is true and false
# but doesn't have the keyword in items
wordNT = {}
wordNF = {}
kaiT = {}
kaiF = {}
# if text is True
def word_in_text(word,text,label):
match = re.search(word,text)
if match and label == True:
kaiT.setdefault('text', []).append(text)
elif match and label == False:
kaiF.setdefault('text', []).append(text)
elif label == True and not match:
wordNT.setdefault('text', []).append(text)
elif label == False and not match:
wordNF.setdefault('text', []).append(text)
# iterate every text in data
for index, row in data.iterrows():
word_in_text('foo', row['text'], row['label'])
word_in_text('bar', row['text'], row['label'])
# make pandas data frame out of dict
wordTDf = pd.DataFrame.from_dict(wordNT)
wordFDf = pd.DataFrame.from_dict(wordNF)
kaiTDf = pd.DataFrame.from_dict(kaiT)
kaiFDf = pd.DataFrame.from_dict(kaiF)
# drop duplicates
wordTDf = wordTDf.drop_duplicates()
wordFDf = wordFDf.drop_duplicates()
kaiTDf = kaiTDf.drop_duplicates()
kaiFDf = kaiFDf.drop_duplicates()
# count how many
wordTrueCount = len(wordTDf.index)
wordFalseCount = len(wordFDf.index)
kaiTrueCount = len(kaiTDf.index)
kaiFalseCount = len(kaiFDf.index)
print(wordTrueCount + wordFalseCount + kaiTrueCount + kaiFalseCount)
Когда я убрал строку
word_in_text('bar', row['text'], row['label'])
и только держи
word_in_text('foo', row['text'], row['label'])
print(wordTrueCount + wordFalseCount + kaiTrueCount + kaiFalseCount)
возвращает 1000 правильно, и наоборот.
Но когда нет, возвращается 1200, а должно быть только 1000?
CSV INPUT sample
текст, этикетка
"эй", ИСТИНА
"гало", ЛОЖЬ
«Как дела?», ИСТИНА
ОЖИДАЕМЫЙ ВЫХОД
1000
ВЫХОД * * тысяча пятьдесят-один
* * 1200 тысяча пятьдесят-дв