我以前没有使用过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行。
答案 0 :(得分:3)
以下内容将加载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
答案 1 :(得分:2)
使用read_csv
和to_csv
。在index
中使用to_csv
关键字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
答案 2 :(得分:1)
尽管通常有更好的解决方案,例如使用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
答案 3 :(得分:1)
看起来像下面的代码片段正在解决我的问题。感谢@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 的值有助于更改您想一次读取/写入的#行。 如果您认为可以更优雅地进行改进,那么欢迎您提出改进意见。