Как предварительно обработать данные из файла Excel в Python?

Мой код может читать текстовый файл xlsx. Он печатает частоту слов (сколько раз слово встречалось). Но я хочу удалить знаки препинания, выражения (#, $,%) и ненужные слова, которые подсчитываются или печатаются.

Код:

import pandas as pd
import re



stop_words = [
"a", "about", "above", "across", "after", "afterwards",
"again", "all", "almost", "alone", "along", "already", "also",
"although", "always", "am", "among", "amongst", "amoungst", "amount", "an",
"and", "another", "any", "anyhow", "anyone", "anything", "anyway", "anywhere", "are", "as", "at", "be", "became",
"because", "become","becomes", "becoming", "been", "before", "behind", "being", "beside", "besides", "between",
"beyond", "both", "but", "by","can", "cannot", "cant", "could", "couldnt", "de", "describe", "do", "done", "each",
"eg", "either", "else", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "find","for",
"found", "four", "from", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein",
"hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "i", "ie", "if", "in", "indeed", "is", "it", "its", "itself", "keep", "least",
"less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mine", "more", "moreover", "most", "mostly", "much", "must", "my", "myself", "name",
"namely", "neither", "never", "nevertheless", "next","no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often",
"on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own", "part","perhaps", "please",
"put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "she", "should","since", "sincere","so", "some", "somehow", "someone",
"something", "sometime", "sometimes", "somewhere", "still", "such", "take","than", "that", "the", "their", "them", "themselves", "then", "thence", "there"
"thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they",
"this", "those", "though", "through", "throughout",
"thru", "thus", "to", "together", "too", "toward", "towards",
"under", "until", "up", "upon", "us",
"very", "was", "we", "well", "were", "what", "whatever", "when",
"whence", "whenever", "where", "whereafter", "whereas", "whereby",
"wherein", "whereupon", "wherever", "whether", "which", "while",
"who", "whoever", "whom", "whose", "why", "will", "with",
"within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves"
]


df = pd.read_excel('C:\\Users\\farid-PC\\Desktop\\Tester.xlsx')
pd.set_option('display.max_colwidth', 1000)
frequency = df.Text.str.split(expand=True).stack().value_counts()
T = 450 #total number of words in file
word_freq = frequency/T
print(word_freq)

Выход:

the             0.046667
to              0.037778
of              0.031111
a               0.022222
and             0.020000
that            0.017778
in              0.015556
was             0.011111
percent         0.011111
Says            0.011111
is              0.011111
than            0.011111
Trump           0.008889
on              0.008889
for             0.008889
are             0.008889
federal         0.008889
million         0.008889

Мне сложно воспроизвести вашу проблему, не могли бы вы загрузить несколько строк вашего файла данных csv xlsx?

chickity china chinese chicken 27.10.2018 00:16

// это файл xlsx. это в основном текстовый файл. Я хочу создать классификатор, который // предсказывает фейковые новости или нет: - Строительство стены на границе США и Мексики займет буквально годы - Висконсин собирается удвоить количество увольнений в этом году. - Говорит, что Джон Маккейн ничего не сделал, чтобы помочь ветеринарам. -Сюзанна Бонамичи поддерживает план, который ограничит выбор пожилых людей по программе Medicare Advantage. На вопрос репортера, стоит ли он в центре преступной схемы, направленной на нарушение законов избирательной кампании, губернатор Скотт Уокер кивнул.

user3658513 29.10.2018 14:45

Я хочу удалить выбранные слова из подсчета. Я хочу применить байесовский классификатор к вероятности выбранного слова.

user3658513 29.10.2018 14:52

Как вы отформатировали этот текст в файл xlsx? Я сохранил этот текст в файле Excel и запустил на нем ваш код, но получил эту ошибку: AttributeError: 'DataFrame' object has no attribute 'Text'

chickity china chinese chicken 29.10.2018 19:41

Это приведет вас к файлу xlsx. это очень коротко.

user3658513 29.10.2018 21:22

Я хочу, чтобы стоп-слова не печатались и не учитывались. например, если появляется слово «the» или «about», то при выводе ему присваивается значение o или null. Я бы предпочел, чтобы он не печатал стоп-слова

user3658513 29.10.2018 21:24

хорошо спасибо. Я добавил ответ, чтобы попытаться помочь вам решить эту проблему.

chickity china chinese chicken 30.10.2018 20:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
557
2

Ответы 2

Если вы используете Python3, попробуйте использовать метод str.maketrans (), ознакомьтесь с простым кодом ниже. Обратите внимание, что все ненужные символы удаляются при печати строки.

intab = "!#&"   #string of chars you don't want
outtab = "   "  # must have same no. of spaces as chars in intab
trantab = str.maketrans(intab, outtab)

str = "This ! string # has & unwanted ! stuff &"

print(str.translate(trantab))

output = В этой строке есть нежелательный материал

Внимательно прочтите комментарии к коду! переменная outtab, которая содержит все, что вы хотите заменить ненужными символами, ДОЛЖНА иметь в ней такое же количество символов, как и intab.

Надеюсь это поможет! Билл

Вероятно, неэффективное решение, но, похоже, дает правильный результат:

exclude = list(string.punctuation) + stop_words + ['--']
remove = re.compile('[%s]' % string.punctuation)

df = pd.read_excel('C:\\Users\\farid-PC\\Desktop\\Tester.xlsx')
pd.set_option('display.max_colwidth', 1000)

# count the words in the file
# count = 0
# for l in df['Text']:
#    count += len(l.split())

f = []
for i, s in enumerate(df['Text']):
    try:
        s = s.lower()
    except AttributeError:
        pass
    no_nums = re.sub(r'[0-9]+', '', s)
    o = remove.sub('', no_nums)
    line = o.split()
    common = list(set(line).intersection(exclude))
    line = ' '.join(word for word in line if word not in common) 
    f.append(line)

ndf = pd.DataFrame({'Text': f})

frequency = ndf.Text.str.split(expand=True).stack().value_counts()

T = 450 # consider change to value in `count`
word_freq = frequency/T

with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print(word_freq)

выход:

says              0.012632
percent           0.010526
million           0.008421
federal           0.008421
trump             0.008421
first             0.006316
government        0.006316
know              0.006316
donald            0.006316
year              0.006316
clinton           0.004211
half              0.004211
worth             0.004211
hillary           0.004211
reagan            0.004211
banks             0.004211
there             0.004211
years             0.004211
people            0.004211
tax               0.004211
ronald            0.004211
did               0.004211
democrats         0.004211
goes              0.004211
food              0.004211
company           0.004211
gave              0.004211
paid              0.002105
plan              0.002105
play              0.002105
campaign          0.002105
advocated         0.002105
scott             0.002105
legislation       0.002105
equality          0.002105
newt              0.002105
address           0.002105
vehicle           0.002105
health            0.002105
law               0.002105
pace              0.002105
wall              0.002105
individual        0.002105
minimum           0.002105
proceeds          0.002105
spend             0.002105
center            0.002105
false             0.002105
faced             0.002105
county            0.002105
bringing          0.002105
help              0.002105
got               0.002105
requires          0.002105
projects          0.002105
handling          0.002105
clintons          0.002105
worse             0.002105
gov               0.002105
package           0.002105
foundation        0.002105
retirement        0.002105
vice              0.002105
like              0.002105
bill              0.002105
agriculture       0.002105
biggest           0.002105
stabilize         0.002105
meetings          0.002105
employees         0.002105
walker            0.002105
congress          0.002105
confiscation      0.002105
back              0.002105
economic          0.002105
scammed           0.002105
marriage          0.002105
road              0.002105
per               0.002105
biden             0.002105
documents         0.002105
congressman       0.002105
texas             0.002105
toxic             0.002105
drop              0.002105
fed               0.002105
superiors         0.002105
sales             0.002105
shelby            0.002105
deport            0.002105
edwards           0.002105
alcohol           0.002105
ginsburg          0.002105
american          0.002105
created           0.002105
proposed          0.002105
act               0.002105
nodded            0.002105
proposes          0.002105
layoffs           0.002105
during            0.002105
mike              0.002105
john              0.002105
receive           0.002105
operations        0.002105
disability        0.002105
state             0.002105
joint             0.002105
wisconsin         0.002105
medicare          0.002105
given             0.002105
citizenship       0.002105
billion           0.002105
north             0.002105
increase          0.002105
scalia            0.002105
halfcent          0.002105
big               0.002105
president         0.002105
criminal          0.002105
commute           0.002105
transportation    0.002105
tennessee         0.002105
double            0.002105
birthright        0.002105
recent            0.002105
suzanne           0.002105
advocating        0.002105
attacks           0.002105
building          0.002105
contributors      0.002105
fact              0.002105
poll              0.002105
recession         0.002105
say               0.002105
schools           0.002105
mccain            0.002105
usmexico          0.002105
mandate           0.002105
just              0.002105
nations           0.002105
threat            0.002105
including         0.002105
security          0.002105
stimulus          0.002105
seniors           0.002105
flores            0.002105
morning           0.002105
considering       0.002105
wants             0.002105
time              0.002105
cut               0.002105
gun               0.002105
role              0.002105
recovery          0.002105
military          0.002105
five              0.002105
single            0.002105
georgia           0.002105
want              0.002105
stamps            0.002105
advantage         0.002105
benefits          0.002105
literally         0.002105
vets              0.002105
reporter          0.002105
gallup            0.002105
afternoon         0.002105
tasked            0.002105
violate           0.002105
bomb              0.002105
days              0.002105
spending          0.002105
rid               0.002105
joe               0.002105
marijuana         0.002105
bonamici          0.002105
care              0.002105
korea             0.002105
votes             0.002105
fund              0.002105
scheme            0.002105
major             0.002105
ri                0.002105
laws              0.002105
number            0.002105
deceased          0.002105
yes               0.002105
session           0.002105
trillion          0.002105
wage              0.002105
said              0.002105
past              0.002105
pence             0.002105
republicans       0.002105
gingrich          0.002105
asked             0.002105
against           0.002105
americans         0.002105
plus              0.002105
current           0.002105
foreign           0.002105
politifact        0.002105
committed         0.002105
affecting         0.002105
supports          0.002105
choice            0.002105
admits            0.002105
border            0.002105
secretary         0.002105
hes               0.002105
former            0.002105
recently          0.002105
country           0.002105
dtype: float64

Я получаю сообщение об ошибке: NameError: строка не определена.

user3658513 30.10.2018 22:25

нужен import string в верхней части скрипта. прости за это

chickity china chinese chicken 30.10.2018 22:26

Если в текстовом файле есть значения с плавающей запятой, я получаю сообщение об ошибке, что атрибут «ниже» не может быть разрешен.

user3658513 30.10.2018 22:32

хорошо, спасибо за отзыв и терпение. Я добавил пункт try / except, чтобы исправить это. не могли бы вы попробовать еще раз? Благодарю.

chickity china chinese chicken 30.10.2018 22:41

Хорошо, он распечатывается, но это следующие проблемы. Он по-прежнему считывает числа и стоп-слова и присваивает им значения. например, 174 доллара, ничего, мы и т. д. как я могу удалить эти значения?

user3658513 31.10.2018 15:08

Извините за это, я пытаюсь воспроизвести эти проблемы, но у меня нет stop_words или цифр. См. Мою демонстрацию здесь: repl.it/@downshift/GlassSharpDatabases. Можете ли вы проверить, соответствует ли ваш код коду в демонстрации или, лучше, поместите свой код в демонстрацию, чтобы мы оба могли их увидеть. проблемы и исправить. Спасибо

chickity china chinese chicken 31.10.2018 18:23

Другие вопросы по теме