簡體   English   中英

如何使用熊貓讀取csv,追加新數據以及寫入新csv

[英]how read csv, append new data, and write to a new csv with pandas

我以前沒有使用過Pandas,看起來我需要一些初步幫助。 我在任何地方都找不到真正的特定示例。

我有一個csv文件,例如file1.csv,如下所示:

ID     value1     value2
1       100        200
2       101        201

我需要一次從file1.csv中讀取1行,追加2個新的列信息/數據,然后將所有內容寫入名為file2.csv的新文件中。 file2.csv應該如下所示:

ID     value1     value2     value3     value4
1       100        200        10         20
2       101        201        11         21

任何人都可以指導或給出一個簡短的示例來說明如何執行此操作(讀取file1,附加新數據(value3和value4列)並將其寫入file2)嗎?

附錄:我需要一次從file1讀取1行,並一次向file2寫1行。

以下將加載file1.csv ,在'value3''value4'列中添加並將結果數據幀輸出為csv。

import pandas as pd

df = pd.read_csv('file1.csv')
df['value3'] = [10, 11]
df['value4'] = [20, 21]
df.to_csv('file2.csv')

file1.csv內容:

ID,value1,value2
1,100,200
2,101,201

file2.csv內容:

,ID,value1,value2,value3,value4
0,1,100,200,10,20
1,2,101,201,11,21

使用read_csvto_csv to_csv使用index關鍵字arg保留或刪除索引。

In [117]: df = pd.read_csv('eg.csv')

In [118]: df
Out[118]:
   col 1  col 2  col 3
0      4      5      6
1      7      8      9

In [119]: df['new col'] = 'data'

In [120]: df
Out[120]:
   col 1  col 2  col 3 new col
0      4      5      6    data
1      7      8      9    data

In [121]: df.to_csv('eg.new.csv')

In [122]: new_df = pd.read_csv('eg.new.csv')      # includes the index

In [123]: new_df
Out[123]:
   Unnamed: 0  col 1  col 2  col 3 new col
0           0      4      5      6    data
1           1      7      8      9    data

In [124]: df.to_csv('eg.new.csv', index=False)    # excludes index

In [125]: new_df = pd.read_csv('eg.new.csv')

In [126]: new_df
Out[126]:
   col 1  col 2  col 3 new col
0      4      5      6    data
1      7      8      9    data

盡管通常有更好的解決方案,例如使用Dask ,更改dtypes或使用分類變量,但一種替代方法是簡單地按塊處理文件。

import pandas as pd

# Read one line at at time. Change chunksize to process more lines at a time. 
reader = pd.read_csv('test.csv', chunksize=1)
write_header = True  # Needed to get header for first chunk

for chunk in reader:
    # Do some stuff
    chunk['val3'] = chunk.val1**2
    chunk['val4'] = chunk.val2*4

    # Save the file to a csv, appending each new chunk you process. mode='a' means append.
    chunk.to_csv('final.csv', mode='a', header=write_header, index=False)
    write_header = False  # Update so later chunks don't write header

樣本數據:test.csv

val1,val2
1,2
3,4
5,6
7,8
9,10
11,12
13,14
15,16

輸出:final.csv

val1,val2,val3,val4
1,2,1,8
3,4,9,16
5,6,25,24
7,8,49,32
9,10,81,40
11,12,121,48
13,14,169,56
15,16,225,64

看起來以下代碼片段正在解決我的問題。 感謝@aydow和@Arda Arslan給予的啟發。

以下代碼段僅使用標題名稱創建file2,其余為空。

column_names = ['ID', 'value1', 'value2', 'value3', 'value4']
raw_data = {column_names[0]: [], 
            column_names[1]: [],
            column_names[2]: [],
            column_names[3]: [], 
            column_names[4]: []}
df = pd.DataFrame(raw_data, columns = column_names)
df.to_csv("file2.csv", index=False) 

下面的代碼一次從file1讀取1行,並將其追加到file2。

for df in pd.read_csv('file1.csv', chunksize=1):
    df['value3'] = 11
    df['value4'] = 22
    df.to_csv("file2.csv", header=False, index=False, mode='a')

更改參數chunksize的值有助於更改您想一次讀取/寫入的#行。 如果您認為可以更優雅地進行改進,那么歡迎您提出改進意見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM