使用不需要的报价清理数据

时间:2017-03-21 10:29:38

标签: python r

我有一个包含客户端号码,地址和费用的csv文件。它从另一个系统导出,因此字段有引号。在R中导入时,由于字符串中不需要的引号和逗号,我遇到了问题。请参阅示例(客户端1和2是正确的,客户端3有问题)

Client number Address                               Premium
"1"            "Building5, Street 30,NY"              1000
"2"           "Building7, Street 10,NY"               1000
"3"           "Building 7\", Street 10,NY"            1000

因此,R将其读作新的第4列,我不想要。我如何以编程方式摆脱它。我没有使用基于R或Python的解决方案来清理csv。如果难以纠正问题,即使删除客户端3也是可接受的解决方案

尝试在python中执行此操作,但没有帮助

import csv

def remove_special_prob(s):
return ''.join(c for c in s if c not in ('\"'))


with open("Client.csv","rb") as infile, open("Client_new.csv","wb") as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile, quoting=csv.QUOTE_ALL)
for line in reader:
    writer.writerow([remove_special_prob(elem) for elem in line])

3 个答案:

答案 0 :(得分:1)

如果它在实际的csv中,则使用return s.replace('\"', '')

您的代码无法正常工作,因为您正在迭代每个字母,但随后将其与2个字母,即\"进行比较。基本上,您的c将首先变为\,然后在"进行迭代,但永远不会等于\"

修改

替换 -

def remove_special_prob(s):
    return s.replace('\"', '')

用于跳过特殊问题行

with open("Client.csv","rb") as infile, open("Client_new.csv","wb") as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile, quoting=csv.QUOTE_ALL)
    for line in reader:
         if line.count('"') > 6:
             continue
         writer.writerow(line)

答案 1 :(得分:1)

在Python中,你可以使用pandas的{​​{1}}这是一个多才多艺的

read_csv

结果

import pandas as pd
from io import StringIO

text = StringIO("""Client number\tAddress\tPremium
"1"\t"Building5, Street 30,NY"\t1000
"2"\t"Building7, Street 10,NY"\t1000
"3"\t"Building 7\", Street 10,NY"\t1000""")

df = pd.read_csv(text, sep='\t')
df['Address'] = df['Address'].str.replace('"', '')
# df.to_clipboard()

答案 2 :(得分:0)

在R中,您可以使用2017-03-21 11:11:54.731 | myApp_35 | myApp_35 | 69E59F4DACC314C0B11B1A8CEA87F9BB | 127.0.0.1 | | GET on URL [/api/customer] executed with success in [18555 us]. 读取文件,删除字符串readLines,然后将其转换为数据框:

\"