[英]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_csv
和to_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
val1,val2
1,2
3,4
5,6
7,8
9,10
11,12
13,14
15,16
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.