Как я могу исправить свою ошибку и сделать фрейм данных текстовым файлом, используя функции python - PullRequest
0 голосов
/ 30 января 2020

Я создаю функцию для преобразования кадра данных в файл .txt.

import pandas as pd

def print_table(dataframe):
    headers = dataframe.columns.to_list()
    table = dataframe.values.tolist()
    with open('file.txt','w') as file:
        file.write(''.join(column.rjust(40) for column in headers))
    for row in table:
        with open('file.txt','w') as file1:
            file1.write(''.join(str(column).ljust(20) for column in row))

df = pd.DataFrame({'Yoruba': ['Wèrè èèyàn ní ńwípé irú òun ò sí; irú ẹ̀ẹ́ pọ̀ ó ju ẹgbàágbèje lọ.','Wọ́n ńpe gbẹ́nàgbẹ́nà ẹyẹ àkókó ńyọjú.'],
 'Translation': ['Only an imbecile asserts that there is none like him or her; his or her likes are numerous, numbering more than millions.',
  'The call goes out for a carpenter and the woodpecker presents itself.'],
 'Meaning': ['No one is incomparable.',
  "One should not think too much of one's capabilities."]})

Вот как я хочу, чтобы файл .txt выглядел как

Yoruba                                                             Translation                                                                                                                 Meaning
"Wèrè èèyàn ní ńwípé irú òun ò sí; irú ẹ̀ẹ́ pọ̀ ó ju ẹgbàágbèje lọ." "Only an imbecile asserts that there is none like him or her; his or her likes are numerous, numbering more than millions." "No one is incomparable."
"Wọ́n ńpe gbẹ́nàgbẹ́nà ẹyẹ àkókó ńyọjú."                             "The call goes out for a carpenter and the woodpecker presents itself."                                                     "One should not think too much of one's capabilities."


**and not this**
Yoruba Translation Meaning
"Wèrè èèyàn ní ńwípé irú òun ò sí; irú ẹ̀ẹ́ pọ̀ ó ju ẹgbàágbèje lọ." "Only an imbecile asserts that there is none like him or her; his or her likes are numerous, numbering more than millions." "No one is incomparable."
"Wọ́n ńpe gbẹ́nàgbẹ́nà ẹyẹ àkókó ńyọjú." "The call goes out for a carpenter and the woodpecker presents itself." "One should not think too much of one's capabilities."

Но это это ошибка, которую я получаю

UnicodeEncodeError: код 'charmap' c не может закодировать символ '\ u0144' в позиции 14: символ отображается на

Ответы [ 2 ]

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

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

Пожалуйста, взгляните на этот ответ: здесь о том, как обрабатывать кодирование и декодирование символов при написании и чтении символов (вам может потребоваться отличное от UTF-8!)

Что касается стилизации вывода, более простой механизм может использовать csv, как показано здесь и используйте пробелы для разграничения видимости, поскольку ваши данные уже представлены в табличной форме из pandas.

В моем случае это работало как альтернатива использованию объединений. Если у вас есть какие-либо другие проблемы, попробуйте использовать кодирование / декодирование.

import pandas as pd
import csv

def print_table(dataframe):  
    with open('file.csv', 'w', newline="") as csvfile:
        writer = csv.writer(csvfile, delimiter="\t", quotechar='', quoting=csv.QUOTE_NONE)
        writer.writerow(heading) for heading in dataframe.columns)

        for row in dataframe.values:
            writer.writerow(row)

df = pd.DataFrame({
    'Yoruba': [
        'Wèrè èèyàn ní ńwípé irú òun ò sí; irú ẹ̀ẹ́ pọ̀ ó ju ẹgbàágbèje lọ.',
        'Wọ́n ńpe gbẹ́nàgbẹ́nà ẹyẹ àkókó ńyọjú.'
    ],
    'Translation': [
        'Only an imbecile asserts that there is none like him or her; his or her likes are numerous, '
        'numbering more than millions.',
        'The call goes out for a carpenter and the woodpecker presents itself.'
    ],
    'Meaning': [
        'No one is incomparable.',
        "One should not think too much of one's capabilities."
    ]
})

print_table(df)
0 голосов
/ 30 января 2020

Это в основном работает для меня:

fout = open("file.txt", 'w', encoding='utf-8')

df = df[['Yoruba', 'Translation', 'Meaning']]


lengths = [len(max(val, key=len)) for val in df.values.T]
for i in range(len(df.columns)-1):
    fout.write("{heading:<{length}} ".format(heading=df.columns[i], length=lengths[i]))
fout.write("{}\n".format(df.columns[-1]))

rows, columns = df.values.shape
for i in range(rows):
    for j in range(columns-1):
        fout.write("{val:<{number}} ".format(val=df.values[i,j], number=lengths[j]))
    fout.write("{}\n".format(df.values[i, j+1]))

fout.close()

Я думаю, что вам не хватает битов "encoding = 'utf-8'". Надеюсь, это поможет!

...