Append a Header for CSV file?

后端 未结 6 663
后悔当初
后悔当初 2020-12-25 07:59

I am trying to add a header to my CSV file.

I am importing data from a .csv file which has two columns of data, each containing float numbers. Example:



        
相关标签:
6条回答
  • 2020-12-25 08:31

    You can set reader.fieldnames in your code as list like in your case

     with open('mycsvfile.csv', 'a') as fd:
            reader = csv.DictReader(fd)
            reader.fieldnames = ["ColA" , "ColB"]
            for row in fd
    
    0 讨论(0)
  • 2020-12-25 08:41

    One way is to read all the data in, then overwrite the file with the header and write the data out again. This might not be practical with a large CSV file:

    #!python3
    import csv
    with open('file.csv',newline='') as f:
        r = csv.reader(f)
        data = [line for line in r]
    with open('file.csv','w',newline='') as f:
        w = csv.writer(f)
        w.writerow(['ColA','ColB'])
        w.writerows(data)
    
    0 讨论(0)
  • 2020-12-25 08:42

    For the issue where the first row of the CSV file gets replaced by the header, we need to add an option.

    import pandas as pd  
    df = pd.read_csv('file.csv', **header=None**)  
    df.to_csv('file.csv', header = ['col1', 'col2']) 
    
    0 讨论(0)
  • 2020-12-25 08:45

    I know the question was asked a long time back. But for others stumbling across this question, here's an alternative to Python.

    If you have access to sed (you do if you are working on Linux or Mac; you can also download Ubuntu Bash on Windows 10 and sed will come with it), you can use this one-liner:

    sed -i 1i"ColA,ColB" mycsvfile.csv
    

    The -i will ensure that sed will edit in-place, which means sed will overwrite the file with the header at the top. This is risky.

    If you want to create a new file instead, do this

    sed 1i"ColA,ColB" mycsvfile.csv > newcsvfile.csv
    
    0 讨论(0)
  • 2020-12-25 08:52

    In this case, You don't need the CSV module. You need the fileinput module as it allows in-place editing:

    import fileinput
    
    for line in fileinput.input(files=['mycsvfile.csv'], inplace=True):
        if fileinput.isfirstline():
            print 'ColA,ColB'
        print line,
    

    In the above code, the print statement will print to the file because of the inplace=True parameter.

    0 讨论(0)
  • 2020-12-25 08:57

    i think you should use pandas to read the csv file, insert the column headers/labels, and emit out the new csv file. assuming your csv file is comma-delimited. something like this should work:

       from pandas import read_csv
    
       df = read_csv('test.csv')
       df.columns = ['a', 'b']
       df.to_csv('test_2.csv')
    
    0 讨论(0)
提交回复
热议问题