programing

CSV 파일에 새 열을 추가하는 방법은 무엇입니까?

closeapi 2023. 5. 26. 20:58
반응형

CSV 파일에 새 열을 추가하는 방법은 무엇입니까?

다음과 같은 CSV 파일이 몇 개 있습니다.

Input
Name        Code
blackberry  1
wineberry   2
rasberry    1
blueberry   1
mulberry    2

모든 CSV 파일에 다음과 같은 새 열을 추가합니다.

Output
Name        Code    Berry
blackberry  1   blackberry
wineberry   2   wineberry
rasberry    1   rasberry
blueberry   1   blueberry
mulberry    2   mulberry

지금까지 설명한 내용은 다음과 같습니다.

import csv
with open(input.csv,'r') as csvinput:
    with open(output.csv, 'w') as csvoutput:
        writer = csv.writer(csvoutput)
        for row in csv.reader(csvinput):
            writer.writerow(row+['Berry'])

(파이썬 3.2)

그러나 출력에서 스크립트는 모든 행을 건너뛰고 새 열에는 Berry만 있습니다.

Output
Name        Code    Berry
blackberry  1   Berry

wineberry   2   Berry

rasberry    1   Berry

blueberry   1   Berry

mulberry    2   Berry

이를 통해 다음과 같은 작업을 수행할 수 있습니다.

>>> v = open('C:/test/test.csv')
>>> r = csv.reader(v)
>>> row0 = r.next()
>>> row0.append('berry')
>>> print row0
['Name', 'Code', 'berry']
>>> for item in r:
...     item.append(item[0])
...     print item
...     
['blackberry', '1', 'blackberry']
['wineberry', '2', 'wineberry']
['rasberry', '1', 'rasberry']
['blueberry', '1', 'blueberry']
['mulberry', '2', 'mulberry']
>>> 

편집, 사용해야 하는 py3k의 참고next(r)

답변을 수락해 주셔서 감사합니다.다음은 보너스(작업 스크립트)입니다.

import csv

with open('C:/test/test.csv','r') as csvinput:
    with open('C:/test/output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator='\n')
        reader = csv.reader(csvinput)

        all = []
        row = next(reader)
        row.append('Berry')
        all.append(row)

        for row in reader:
            row.append(row[0])
            all.append(row)

        writer.writerows(all)

부디 참고하세요

  1. lineterminator의 매개 변수.csv.writer기본적으로 다음으로 설정됩니다.'\r\n'그래서 띄어쓰기가 두 배가 되는 거죠.
  2. 모든 행을 추가하고 한 번에 쓰기 위한 목록의 사용writerows파일 크기가 매우 매우 큰 경우에는 RAM(Ram)이 좋지 않을 수 있지만 일반 파일의 경우에는 I/O가 적기 때문에 더 빠르다고 생각합니다.
  3. 이 게시물에 대한 댓글에 표시된 바와 같이, 두 개를 중첩하는 대신에,with문을 사용하면 동일한 줄에서 수행할 수 있습니다.

    open('C:/test/test.csv', 'r')을 csvvinput으로 사용, open('C:/test/output.csv', 'w')을 csv 출력으로 사용:

아무도 판다를 제안하지 않은 것이 놀랍습니다.Panda와 같은 종속성 집합을 사용하는 것이 이러한 쉬운 작업에 필요한 것보다 더 가혹하게 보일 수 있지만, 매우 짧은 스크립트를 생성하고 Panda는 모든 종류의 CSV(및 실제로 모든 데이터 유형) 데이터 조작을 수행하는 데 유용한 라이브러리입니다.코드의 네 줄을 따질 수 없습니다.

import pandas as pd
csv_input = pd.read_csv('input.csv')
csv_input['Berries'] = csv_input['Name']
csv_input.to_csv('output.csv', index=False)

더 많은 정보를 위해 판다 웹사이트를 확인하세요!

의 내용output.csv:

Name,Code,Berries
blackberry,1,blackberry
wineberry,2,wineberry
rasberry,1,rasberry
blueberry,1,blueberry
mulberry,2,mulberry
import csv
with open('input.csv','r') as csvinput:
    with open('output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput)

        for row in csv.reader(csvinput):
            if row[0] == "Name":
                writer.writerow(row+["Berry"])
            else:
                writer.writerow(row+[row[0]])

어쩌면 당신이 의도했던 것과 같은 것이 아닐까요?

또한 csv는 쉼표로 구분된 값을 나타냅니다.그래서 이렇게 값을 구분하기 위해서는 쉼표가 필요합니다.

Name,Code
blackberry,1
wineberry,2
rasberry,1
blueberry,1
mulberry,2

판다를 사용했는데 효과가 좋았어요...사용하는 동안 파일을 열고 임의의 열을 추가한 다음 동일한 파일에만 다시 저장해야 했습니다.

이 코드는 여러 개의 열 항목을 추가하므로 필요한 만큼 편집할 수 있습니다.

import pandas as pd

csv_input = pd.read_csv('testcase.csv')         #reading my csv file
csv_input['Phone1'] = csv_input['Name']         #this would also copy the cell value 
csv_input['Phone2'] = csv_input['Name']
csv_input['Phone3'] = csv_input['Name']
csv_input['Phone4'] = csv_input['Name']
csv_input['Phone5'] = csv_input['Name']
csv_input['Country'] = csv_input['Name']
csv_input['Website'] = csv_input['Name']
csv_input.to_csv('testcase.csv', index=False)   #this writes back to your file

셀 값이 복사되지 않도록 하려면 먼저 csv 파일에 시간으로 명명한 것처럼 빈 열을 수동으로 생성합니다. 이제 이 행을 위 코드에 추가할 수 있습니다.

csv_input['New Value'] = csv_input['Hours']

또는 단순히 수동 열을 추가하지 않고도 할 수 있습니다.

csv_input['New Value'] = ''    #simple and easy

도움이 되길 바랍니다.

예, 오래된 질문이지만 일부 도움이 될 수 있습니다.

import csv
import uuid

# read and write csv files
with open('in_file','r') as r_csvfile:
    with open('out_file','w',newline='') as w_csvfile:

        dict_reader = csv.DictReader(r_csvfile,delimiter='|')
        #add new column with existing
        fieldnames = dict_reader.fieldnames + ['ADDITIONAL_COLUMN']
        writer_csv = csv.DictWriter(w_csvfile,fieldnames,delimiter='|')
        writer_csv.writeheader()


        for row in dict_reader:
            row['ADDITIONAL_COLUMN'] = str(uuid.uuid4().int >> 64) [0:6]
            writer_csv.writerow(row)

기존 CSV 파일(헤더 포함)에 새 열을 추가하는 경우, 추가할 열의 값이 충분히 적으면 편리한 함수가 있습니다(@joaquin의 솔루션과 다소 유사함).함수는 다음을 수행합니다.

  1. 기존 CSV 파일 이름
  2. 출력 CSV 파일 이름(업데이트된 콘텐츠가 포함됨) 및
  3. 머리글 이름 및 열 값이 있는 목록
def add_col_to_csv(csvfile,fileout,new_list):
    with open(csvfile, 'r') as read_f, \
        open(fileout, 'w', newline='') as write_f:
        csv_reader = csv.reader(read_f)
        csv_writer = csv.writer(write_f)
        i = 0
        for row in csv_reader:
            row.append(new_list[i])
            csv_writer.writerow(row)
            i += 1 

예:

new_list1 = ['test_hdr',4,4,5,5,9,9,9]
add_col_to_csv('exists.csv','new-output.csv',new_list1)

기존 CSV 파일:

출력(업데이트된) CSV 파일:

새 열을 추가할 위치가 보이지 않지만 다음과 같이 하십시오.

    import csv
    i = 0
    Berry = open("newcolumn.csv","r").readlines()
    with open(input.csv,'r') as csvinput:
        with open(output.csv, 'w') as csvoutput:
            writer = csv.writer(csvoutput)
            for row in csv.reader(csvinput):
                writer.writerow(row+","+Berry[i])
                i++

이 코드는 당신의 요청에 충분할 것이고 저는 샘플 코드를 테스트했습니다.

import csv

with open(in_path, 'r') as f_in, open(out_path, 'w') as f_out:
    csv_reader = csv.reader(f_in, delimiter=';')
    writer = csv.writer(f_out)

    for row in csv_reader:
    writer.writerow(row + [row[0]]

이 큰 에는 대량파사수있경우는용할용을 할 수 .pandas.read_csvchunksize청크당 데이터 집합을 읽을 수 있는 인수:

import pandas as pd

INPUT_CSV = "input.csv"
OUTPUT_CSV = "output.csv"
CHUNKSIZE = 1_000 # Maximum number of rows in memory

header = True
mode = "w"
for chunk_df in pd.read_csv(INPUT_CSV, chunksize=CHUNKSIZE):
    chunk_df["Berry"] = chunk_df["Name"]
    # You apply any other transformation to the chunk
    # ...
    chunk_df.to_csv(OUTPUT_CSV, header=header, mode=mode)
    header = False # Do not save the header for the other chunks
    mode = "a" # 'a' stands for append mode, all the other chunks will be appended

파일을 업데이트하려면 임시 파일을 사용하고 마지막에 지울 수 있습니다.

import pandas as pd

INPUT_CSV = "input.csv"
TMP_CSV = "tmp.csv"
CHUNKSIZE = 1_000 # Maximum number of rows in memory

header = True
mode = "w"
for chunk_df in pd.read_csv(INPUT_CSV, chunksize=CHUNKSIZE):
    chunk_df["Berry"] = chunk_df["Name"]
    # You apply any other transformation to the chunk
    # ...
    chunk_df.to_csv(TMP_CSV, header=header, mode=mode)
    header = False # Do not save the header for the other chunks
    mode = "a" # 'a' stands for append mode, all the other chunks will be appended

os.replace(TMP_CSV, INPUT_CSV)

당신은 그냥 다음과 같이 쓸 수 있습니다.

import pandas as pd
import csv
df = pd.read_csv('csv_name.csv')
df['Berry'] = df['Name']
df.to_csv("csv_name.csv",index=False)

그러면 끝입니다.확인하려면 다음을 실행할 수 있습니다.

h = pd.read_csv('csv_name.csv') 
print(h)

임의의 새 요소(a,b,c)가 있는 열을 추가하려면 코드의 네 번째 줄을 다음으로 바꿀 수 있습니다.

df['Berry'] = ['a','b','c']

헤더 이름 없이 python을 사용하여 기존 csv 파일에 새 열 추가

  default_text = 'Some Text'
# Open the input_file in read mode and output_file in write mode
    with open('problem-one-answer.csv', 'r') as read_obj, \
    open('output_1.csv', 'w', newline='') as write_obj:
# Create a csv.reader object from the input file object
    csv_reader = reader(read_obj)
# Create a csv.writer object from the output file object
    csv_writer = csv.writer(write_obj)
# Read each row of the input csv file as list
    for row in csv_reader:
# Append the default text in the row / list
        row.append(default_text)
# Add the updated row / list to the output file
        csv_writer.writerow(row)

감사해요.

언급URL : https://stackoverflow.com/questions/11070527/how-to-add-a-new-column-to-a-csv-file

반응형