为了账号安全,请及时绑定邮箱和手机立即绑定

如何纠正我的错误并使用 python 中的函数使数据框成为文本文件

如何纠正我的错误并使用 python 中的函数使数据框成为文本文件

翻翻过去那场雪 2022-07-12 18:35:27
我正在创建一个将数据框转换为 .txt 文件的函数。import pandas as pddef 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."但这是我得到的错误UnicodeEncodeError:“charmap”编解码器无法在位置 14 编码字符“\u0144”:字符映射到
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

这在很大程度上对我有用:


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'”。希望这可以帮助!


查看完整回答
反对 回复 2022-07-12
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

在这种情况下,您的输入文本编码和您尝试执行的 panda 输出编码之间似乎存在问题。


请看一下这个答案:here on how to handle encoding anddecode characters when writing and reading characters(你可能需要不同于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)


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号