Saya ingin menambahkan kolom ke indeks yang diberikan dengan nilai yang berbeda setiap kali (nilai itu dihitung tergantung pada nilai baris). Ini adalah contoh csv saya:

org,repo_name,stars_count,fork_count,commit_count
freeCodeCamp,freeCodeCamp,303178,22005,23183,1703
vuejs,vue,140222,20150,3016,82
twbs,bootstrap,133730,65555,18714,46
...

Sejauh ini saya mencoba jawaban yang diberikan di sini: kolom sisipan python pandas

def func(f):
    files = f
    df = pd.read_csv(files)
    df = df.convert_objects(convert_numeric=True)
    df.insert(2, 'new', 1000)
    df.to_csv(files) 

Saya mendapatkan hasil dari baris yang ditambahkan ke indeks 2 dengan nilai 1000.

,org,repo_name,new,stars_count,fork_count,commit_count
freeCodeCamp,freeCodeCamp,303178,1000,22005,23183,1703
vuejs,vue,140222,1000,20150,3016,82
twbs,bootstrap,133730,1000,65555,18714,46
...

Bagaimana cara memodifikasi ini untuk dapat menambahkan nilai tertentu ke setiap baris alih-alih menambahkan 1000 di mana-mana? Dan bagaimana cara menambahkan header sehingga saya mendapatkan output berikut? Harap dicatat bahwa score1... scoreN adalah variabel int, bukan string dan Anda dapat mengasumsikan bahwa variabel tersebut telah dihitung.

org,repo_name,score,new,stars_count,fork_count,commit_count
freeCodeCamp,freeCodeCamp,303178,score1,22005,23183,1703
vuejs,vue,140222,score2,20150,3016,82
twbs,bootstrap,133730,score3,65555,18714,46
...

Terima kasih.

1
Nanoboss 4 Juni 2019, 09:26

2 jawaban

Jawaban Terbaik

Pandas hampir berlebihan untuk hanya memasukkan kolom baru ke dalam csv:

with open('input.csv') as fdin, open('output.csv', 'w', newline='') as fdout:
    rd = csv.DictReader(fdin)
    fields = list(rd.fieldnames)
    fields.insert(2, 'new')
    wr = csv.DictWriter(fdout, fieldnames=fields)
    wr.writeheader()
    for row in rd:
        row['new'] = compute_val(row)    # or compute_val(*row)
        wr.writerow(row)
0
Serge Ballesta 5 Juni 2019, 10:23

Anda dapat mencoba sesuatu seperti ini:

len_df = len(df.index)+1
df["new"] = ["score"+str(i) for i in range(1,len_df)]

Saya harap ini akan membantu Anda. ok jadi ini mungkin akan membantu:

df["new"].values[2] = score_value

Perhatikan bahwa nilai_skor adalah int

1
Amazing Things Around You 4 Juni 2019, 07:56