我有一个仅包含列标题的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
答案 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