Создание фрейма данных формирует цикл - PullRequest
0 голосов
/ 15 января 2019

Мне нужно создать фрейм данных из цикла. Идея состоит в том, что цикл будет читать фрейм данных текстов (train_vs) и искать конкретные ключевые слова ['rule', 'data'], а затем вычислять их частоту или TF. то, что я хочу, это результат двух столбцов с TF слов для каждого текста внутри них. код, который я использую, следующий:

d = pd.DataFrame()
key = ['govern', 'data']
for k in key:
    for w in range(0, len(train_vs)):
        wordcount = Counter(train_vs['doc_text'].iloc[w])
        a_vs = (wordcount[k]/len(train_v.iloc[w])*1)
        temp = pd.DataFrame([{k: a_vs}] )
        d = pd.concat([d, temp])

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

Я хочу, чтобы оба значения были рядом друг с другом.
Ваша помощь высоко ценится.
Благодарю.

1 Ответ

0 голосов
/ 15 января 2019

Из документации pandas.concat :

Объедините объекты DataFrame с перекрывающимися столбцами и верните все. Столбцы вне пересечения будут заполнены значениями NaN.

Что вы делаете, когда цикл с изменениями ключа состоит в том, чтобы попытаться объединить новый df (temp) с одним столбцом ('data') со старым df, который также имеет один столбец ('gonvern') и именно поэтому вы получаете половину столбцов NAN.

Что бы вы могли сделать вместо объединения миллионов фреймов данных, это построить только один фрейм данных, построив столбцы.

d = pd.DataFrame()
key = ['govern', 'data']
for k in key:
    column = []
    for w in range(0, len(train_vs)):
        wordcount = Counter(train_vs['doc_text'].iloc[w])
        a_vs = (wordcount[k] / len(train_v.iloc[w]) * 1)
        column.append(a_vs)
    d[k] = column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...