Создание словаря для файлов данных CSV большого размера, используя pandas - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь создать файл словаря для файла CSV большого размера, который делится на куски для обработки, но когда я создаю словарь, я просто делаю это для одного чака, и когда я пытаюсь добавить его это передает epmty dataframe новому df. это код, который я использовал

wdata = pd.read_csv(fileinput, nrows=0,).columns[0]
skip = int(wdata.count(' ') == 0)
dic = pd.DataFrame()
for chunk in pd.read_csv(fileinput, names=['sentences'], skiprows=skip, chunksize=1000):
    dic_tmp = (chunk['sentences'].str.split(expand=True).stack().value_counts().rename_axis('word').reset_index(name='freq'))


    dic.append(dic_tmp)
dic.to_csv('newwww.csv', index=False)

, если я сохранил dic_tmp, то это просто словарь для одного куска, а не для всего набора, а di c занимает много времени для обработки, но возвращает пустые кадры данных в конец, любая ошибка с моим кодом?

входной CSV похож на

enter image description here

выходной CSV похож на

enter image description here

ожидаемый результат должен составлять

enter image description here

, поэтому он не добавляет куски вместе, а просто вставляет новый блок независимо от того, что находится в предыдущем блоке или CSV.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Чтобы разбить столбец на слова и сосчитать вхождения: df['sentences'].apply(lambda x: pd.value_counts(x.split(" "))).sum(axis=0)

или

from collections import Counter result = Counter(" ".join(df['sentences'].values.tolist()).split(" ")).items()

оба выглядят одинаково медленно, но, вероятно, лучше, чем ваш подход. Взяты отсюда: Подсчет отдельных слов из Pandas Фрейма данных

0 голосов
/ 20 января 2020

Я вижу пару проблем:

  1. Зачем читать файл CSV дважды? Первый раз здесь wdata = pd.read_csv(fileinput, nrows=0,).columns[0] и второй раз в for l oop.

  2. Если вы больше не используете объединенный фрейм данных. Я думаю, что лучше записать куски в CSV-файл в режиме добавления, как показано ниже

for chunk in pd.read_csv(fileinput, names=['sentences'], skiprows=skip, chunksize=1000):
    dic_tmp = (chunk['sentences'].str.split(expand=True).stack().value_counts().rename_axis('word').reset_index(name='freq'))
    dic_tmp.to_csv('newwww.csv', mode='a', header=False)
...