【问题标题】:remove last empty line from pandas to csv using lineterminator使用 lineterminator 从 pandas 删除最后一个空行到 csv
【发布时间】:2020-11-27 08:28:40
【问题描述】:

我有一个要求,我必须将一些列拆分为第一行,将其余列拆分为第二行。

我已将它们存储在一个数据框中,例如:

columnA   columnB   columnC   columnD
   A         B         C         D

到文本文件sample.txt:

A,B
C,D

这是代码:

cleaned_data.iloc[:, 0:1].to_csv("report_csv.txt", encoding='utf-8', index=False, header=False, line_terminator='')
cleaned_data.iloc[:,1:].to_csv("report_csv.txt", encoding='utf-8', index=False, header=False, mode='a', line_terminator='')

它应该在sample.txt 中按预期生成。但是,第三行是空的,我不希望它存在。我试过lineterminator='',它不适用于'',但它适用于' ''abc'等。

我确信生成示例文本文件的方法比使用我编写的文件更好。我正在寻找其他选择。

不过,我怎样才能删除最后一个空行?我正在使用 python 3.8

【问题讨论】:

    标签: python pandas dataframe csv series


    【解决方案1】:

    我无法重现您的问题,但可能是您的数据框中的字符串包含尾随换行符。我在 Linux 上运行 Pandas 0.23.4

    import pandas
    print(pandas.__version__)
    

    我使用命令创建了我认为您的数据框包含的内容

    df = pandas.DataFrame({'colA':['A'], 'colB': ['B'], 'colC':['C'], 'colD':['D']})
    

    要检查单元格的内容,您可以使用df['colA'][0]

    获取第一列和第二列所需的索引是

    df.iloc[:, 0:2]
    

    我获得 CSV 的方式并不依赖于 lineterminator

    df.iloc[:, 0:2].to_csv("report_csv.txt", encoding='utf-8', index=False, header=False)
    df.iloc[:,2:].to_csv("report_csv.txt", encoding='utf-8', index=False, header=False, mode='a')
    

    当我跑步时

    with open('report_csv.txt','r') as file_handle:
    dat = file_handle.read()
    

    我从dat 得到'A,B\nC,D\n'

    要在最后一行没有尾随换行符,请使用 to_string()

    with open('output.txt','w') as file_handle:
        file_handle.write(df.iloc[:, 0:2].to_string(header=False,index=False)+"\n")
        file_handle.write(df.iloc[:,2:].to_string(header=False,index=False))
    

    然后我们可以通过运行验证文件是否按照需要格式化

    with open('output.txt','r') as file_handle:
        dat = file_handle.read()
    

    dat 包含 'A B\nC D'。如果空格不是可接受的分隔符,则可以在写入文件之前将它们替换为 ,

    【讨论】:

    • 我正在使用 pandas 1.1.4... 从你的结果来看,它最后仍然有\n。我的预期输出是'A,B\nC,D'
    • @user6308605 - 我用to_string() 方法更新了我的答案,消除了尾随换行符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2019-06-06
    • 2020-10-07
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多