Как предотвратить формат таблицы при записи файла паркета в файл CSV с помощью pandas.DataFrame? - PullRequest
0 голосов
/ 29 апреля 2019

Я прочитал файл паркет , который является выходом spark mllib , используя pyarrow.parquet . Выход состоит из нескольких строк, и каждая строка имеет две пары: слово и вектор (каждая строка представляет собой пару word2vec ). как следующее:

 word1 "[-0.10812066  0.04352815 0.00529436 -0.0492562 -0.0974493533  0.275364409  -0.06501597  -0.3123745185 0.28186324 -0.05055101 0.06338456   -0.0842542  -0.10491376 -0.09692618 0.02451115  0.10766134]"  
 word2 "[-0.10812066  0.04352815 0.1875908 -0.0492562 ...
 ... 

когда я использовал DataFrame для записи результатов в файл csv , я получил это:

 word1 "[-0.10812066  0.04352815 0.00529436 -0.0492562
    -0.0974493533  0.275364409  -0.06501597  -0.3123745185
    0.28186324 -0.05055101 0.06338456   -0.0842542   
    -0.10491376 -0.09692618 0.02451115  0.10766134]"  
 word2 "[-0.10812066  0.04352815 0.1875908 -0.0492562 ...
 ... 

Как видите, каждый вектор в специальной позиции разделен на несколько строк. Как я могу получить вывод csv как то, что я читаю из файла parquet ? мой исходный код здесь:

import pandas as pd
import pyarrow.parquet as pq

data = pq.read_pandas('C://Users//...//p.parquet', columns=['word', 'vector']).to_pandas()

df = pd.DataFrame(data)

pd.DataFrame.to_csv(df, 'C://Users/...//p.csv', sep=" ", encoding='utf-8', columns=['word', 'vector'], index=False, header=False)

Размер DataFrame: 47524 , а форма DataFrame: (23762, 2)

1 Ответ

0 голосов
/ 11 мая 2019

После долгих поисков я не нашел прямого решения своей проблемы. но я решил свою проблему, используя списки в Python.

data = pq.read_pandas('C://...//p.parquet', columns['word','vector']).to_pandas()
df = pd.DataFrame(data)

vector = df['vector'].tolist()
word = df['word'].tolist()

k = [[]]
for i in range(0, word.__len__()):
    l = []
    l.append(word[i])
    l.extend(vector[i])
    k.append(l)

with open('C://...//f.csv', "w", encoding="utf-8") as f:
    writer = csv.writer(f)
    for row in k:
        writer.writerow(row)

Итак, вывод был показан в той же форме, что и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...