我有一个包含客户端号码,地址和费用的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])
答案 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
,然后将其转换为数据框:
\"