如何使用熊猫作为分隔符作为空格的csv而不用双引号

时间:2019-08-27 04:45:33

标签: python pandas

我正在尝试编写一个Python脚本,该脚本基本上使用Pandas readCSV读取CSV / TSV文件(来自CSV的输入示例,如下所示)

0,18778586,Toys,5,0,0,N,Y,Great Quality!!!,2015-08-31,excellent!!!,35.6,0.0,0.0,1.0,0.6784

然后,我仅通过分别保留column [1],column [8]来删除数据帧中不需要的列,并执行apply函数从column [8]中剥离特殊字符并将其转换为小写 然后,我尝试使用大熊猫将数据框中的CSV格式写为txt,以使其看起来像这样

18778586 great quality

格式是文档ID(数字),中间用空格(字符串)分隔。该字符串可以包含空格。

基本上我已经尝试了以下各种组合:-

  1. 更改分隔符-这种工作方式,但ID和文本的分隔符是另一个字符。我似乎无法直接在系统上使用此文件,因为它需要空格
  2. 使用escapechar。这种类型可以解决此问题,但是问题是文本部分是双倍行距而不是单个空格。我正在努力避免这种情况
  3. 使用Pandas(DataFrame)toString +将其写为txt文件-现在可以得到我想要的内容,但是它似乎在截断文本-除非有一种方法可以使它打印整个文本而不是将其截断像桌子一样

很明显,我可以编写另一个程序,该程序读取输出文件并删除双精度空格,或者将其看到的第一个选项卡替换为空格。如果没有解决办法,那应该是最后的选择

df.to_csv(filename,header=False,sep=' ',index=False,doublequote=False,quoting=csv.QUOTE_NONE,escapechar=' ')

该代码目前为我提供以下输出。注意双倍间距

18778586 great  quality

1 个答案:

答案 0 :(得分:0)

使用tab作为输出分隔符,或用NON-BREAKING spaces替换现场空格! 假设您有一个名为test.csv的文件,其中包含以下内容:

0,18778586, Toys,5,0,0,N,Y,This is fantastic,2015-08-31
0,18778586,  Toys,5,0,0,N,Y,Excellent!!!,2015-08-31
0,18778586,Toys,5,0,0,N,Y   ,Excellent!!!,2015-08-31

U可以应用applymap来应用strip方法或您可能要对每个单元格进行的任何处理。

space用作output separator时,熊猫会包装包含诸如"This is fantastic"这样的空格的输出字段。

  • 使用tabs \t作为输出分隔符可解决此问题
df = pandas.read_csv('test.csv', header=None)
df = df.applymap(lambda x: str(x).strip())
df.to_csv(path_or_buf='out.txt', sep='\t', header=False, index=None, columns=[1,8])

# out.txt
# 18778586        This is fantastic
# 18778586        Excellent!!!
# 18778586        Excellent!!!
  • 获得所需输出的另一种解决方法是用non-breaking spaces 替换字符串中的空格。
...
df = df.applymap(lambda x: str(x).strip().replace(' ', u"\u00A0"))
...

# out.txt
# 18778586 This is fantastic
# 18778586 Excellent!!!
# 18778586 Excellent!!!