2017-01-31 43 views
4

一个数据帧进行非数值列添加引号“”将每个元素我有数据帧如何保存为CSV

id,type,value 
1,8,value1 
2,2,value2 
3,7,value3 
4,3,value4 
5,10,value5 
6,3,value16 

我想补充的价值id和CSV文件的value要分配报价

"1",8,"value1" 
"2",2,"value2" 

什么更好的方式来做到这一点

+0

也许向我们展示您尝试过的以及您的尝试出了什么问题? – MooingRawr

+1

您可能想重新考虑选择@ Boud的答案。该答案适用于旨在编写csv文件的规范技术。 – piRSquared

回答

11

转换你的id列作为一个字符串列。然后使用适当的参数在功能to_csv

import csv 
df.id = df.id.astype(str) 
df.to_csv('test.txt', index=False, quotechar='"', 
         header=None, quoting=csv.QUOTE_NONNUMERIC) 

csv.QUOTE_NONNUMERIC将适用引号是明显的非数字像整数或浮点数的所有列。

+0

这是很好的信息 – piRSquared

+0

是的附注:任何与csv格式有关的问题都可以根据我的经验通过to_csv参数修复,或者你正在尝试一些东西是不合理的,我建议你总是挖掘to_csv docstring - 我必须认识到它有点混淆,尽管 – Boud

+0

'df.assign (id = df.id.astype(str),value = df.value.astype(str))。to_csv( index = False,quotechar =''', header = None,quoting = csv.QUOTE_NONNUMERIC)'Prints来筛选并证明这一点。我会深入研究它。 – piRSquared

4

转换为字符串,并使用+

df.update('"' + df[['id', 'value']].astype(str) + '"') 
print(df) 

使用applymap

df.update(df[['id', 'value']].applymap('"{}"'.format)) 
print(df) 

两个产生

id type  value 
0 "1"  8 "value1" 
1 "2"  2 "value2" 
2 "3"  7 "value3" 
3 "4"  3 "value4" 
4 "5" 10 "value5" 
5 "6"  3 "value16" 
+0

'df.update'和'df = df.applymap()'有什么区别? 'df.update'不会创建一个新的df? – MYGz

+0

@MYGz是的,我喜欢语法更好...有时 – piRSquared

+0

为什么当我在文件中写入日期帧,然后出现三个引号@piRSquared – Ekaterina