如何逐个单元格写入单个行并将其填充到csv文件中

时间:2018-09-25 09:10:50

标签: python pandas

我有一个仅包含列标题的CSV文件:

 cat mycsv.csv
 col_1@@@col_2@@@col_3@@@col_3

我必须在CSV文件的每个单元格中用None值填充一行。有人可以建议我在Python和Pandas中执行此操作的最佳方法吗?

填充行后,csv文件应如下所示:

 cat mycsv.csv
 col_1 , col_2 , col_3 , col_3
 0@@@None@@@None@@@None

如何插入索引和分隔符是@@@而不是,?我收到以下错误消息:

tmp.to_csv(csvFile,sep='@@@',index=True) 
 , line 1381, in to_csv
formatter.save()
 3.6.1/linux_x86_64/lib/python3.6/site-packages/pandas/formats/format.py", line 1473, in save
self.writer = csv.writer(f, **writer_kwargs)
  TypeError: "delimiter" must be a 1-character string
Exception ignored in: <module 'threading' from Traceback (most recent call last):
File python-3.6.1/linux_x86_64/lib/python3.6/threading.py", line 1015, in 
_delete
del _active[get_ident()] 
KeyError: 140459817715712

2 个答案:

答案 0 :(得分:0)

@还是,吗?如果您使用的是正式的csv文件,则标头的分隔符应与内容相同。

如果您的意思是,,则可以使用类似的内容。

import pandas as pd
# just for abrevation
tmp = pd.read_csv("mycsv.csv",sep=',')
tmp.loc[0,:] = "None"
tmp.to_csv("mycsv.csv",sep=',',index=False)

如果您的意思是@,建议您不要使用熊猫。只需使用简单的IO方式。

tmp = open("mycsv.csv","r").read()
tmp = tmp + "\n" + "@@@".join(["None"] * len(tmp.split(',')))
with open("mycsv.csv","w") as f1:
    f1.write(tmp)

答案 1 :(得分:0)

您试图做的是相当不规范的。首先,读取第一行作为标题,并使用@@@分隔符将其拆分。接下来打开一个输出文件,并使用,作为分隔符将此标头写入。接下来,使用row分隔符编写@@@。例如:

row = [0, None, None, None]

with open('mycsv.csv') as f_input:
    header = next(f_input).strip().split('@@@')

with open('mycsv2.csv', 'w') as f_output:
    f_output.write(' , '.join(header) + '\n')
    f_output.write('@@@'.join(map(str, row)) + '\n')

如果mycsv.csv包含:

col_1@@@col_2@@@col_3@@@col_3        

然后mycsv2.csv将写为:

col_1 , col_2 , col_3 , col_3
0@@@None@@@None@@@None