【问题标题】:to_csv storing columns label on every insert of data to csv fileto_csv 将每个插入数据的列标签存储到 csv 文件
【发布时间】:2021-06-05 22:22:03
【问题描述】:

当我第一次在 csv 文件中插入数据时,这很好 但第二次它再次插入列名

import pandas as pd




name = input("Enter student name")

print("")
print("enter marks info below")
print("")
eng= input("enter English mark : ")
maths= input("enter Maths mark : ")
physics= input("enter Physics mark : ")
chemistry= input("enter Chemistry mark : ")
ip= input("enter Informatic Practices mark : ")

dict = {
        "name":{name:name},
        "english":{name:eng},
        "maths":{name:maths},
        "physics":{name:physics},
        "chemistry":{name:chemistry},
        "ip":{name:ip}
    }
df= pd.DataFrame(dict)


df.to_csv("hello.csv", sep="|",index=False,na_rep="null",mode='a')
print("hello.csv")
read = pd.read_csv("hello.csv", sep='|')

print(read)

csv 文件中的数据:

name|english|maths|physics|chemistry|ip
dddd|dd|e3|3|3|3
name|english|maths|physics|chemistry|ip 
ddddddd|e33|33|3||3
name|english|maths|physics|chemistry|ip
dddddd|33|333||3|

请帮助解决如何修复该列不会被多次添加

【问题讨论】:

  • 后续通行证使用header=None

标签: python pandas csv export-to-csv


【解决方案1】:

输出文件以追加模式打开,to_csv() 默认包含标题行。您可以简单地关闭标题:

df.to_csv("hello.csv", header=False, sep="|", index=False, na_rep="null", mode='a')

这会起作用,但您的 CSV 文件将没有标题行。如果您需要标头,则可以检查输出 CSV 文件是否已存在,如果存在则禁用标头。

@Eason 的回答中建议的一种方法,但是,由于额外的加载时间,这对于大文件可能不实用(可能这就是您使用附加模式的原因?)

如果文件已存在且不为空,则以下内容将禁用 CSV 标头。

from pathlib import Path

header = True
p = Path('hello.csv')
if p.exists() and p.stat().st_size:
    header = False

df.to_csv(p, header=header, sep="|", index=False, na_rep="null", mode='a')

【讨论】:

    【解决方案2】:

    您可以在每次运行此脚本之前读取 csv 文件。

    import pandas as pd
    import os
    
    df = pd.DataFrame() if not os.path.exists("hello.csv") else pd.read_csv("hello.csv", sep='|')
    
    name = input("Enter student name")
    print("")
    print("enter marks info below")
    print("")
    eng = input("enter English mark : ")
    maths = input("enter Maths mark : ")
    physics = input("enter Physics mark : ")
    chemistry = input("enter Chemistry mark : ")
    ip = input("enter Informatic Practices mark : ")
    
    dict = {
        "name": {name: name},
        "english": {name: eng},
        "maths": {name: maths},
        "physics": {name: physics},
        "chemistry": {name: chemistry},
        "ip": {name: ip}
    }
    df = df.append(pd.DataFrame(dict))
    
    df.to_csv("hello.csv", sep="|", index=False, na_rep="null", mode='w')
    print("hello.csv")
    read = pd.read_csv("hello.csv", sep='|')
    
    print(read)
    

    您也可以使用下面的code 导出不带列的 df,但可能仍需要先检查文件是否存在或列顺序。

    df.to_csv('filename.csv', header=False, sep='|', mode='a')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多