导入不需要的字符、字符串的脏CSV文件



我想用pandas导入csv文件。通常我的数据以以下形式给出:

a,b,c,d
a1,b1,c1,d1
a2,b2,c2,d2

,其中a,b,c,d为标题。我可以很容易地使用熊猫。read_csv这里。然而,现在我有这样的数据存储:

"a;b;c;d"
"a1;"b1";"c1";"d1""
"a2;"b2";"c2";"d2""

我怎样才能以最有效的方式清理它?如何删除整个行周围的字符串,以便它可以检测列?然后如何去除所有的"?

谢谢你的帮助!

我不知道该怎么办。输入图片描述

这是read_csv的一个选择(,我相信我们可以做得更好):

df = (
pd.read_csv("input.csv", sep=r";|;\?", engine="python")
.pipe(lambda df_: df_.set_axis(df_.columns.str.strip('"'), axis=1))
.replace(r'[\"]', "", regex=True)
)

输出:

​
print(df)
​
a   b   c   d
0  a1  b1  c1  d1
1  a2  b2  c2  d2

您可以使用sed将文件分解为您选择的格式。

对于一个简单的例子匹配您的问题使用sed:

$ cat file 
"a1a1;"a1a1";"a1a1";"a1a1""
$ cat file | sed 's/"//g'
a1a1;a1a1;a1a1;a1a1

sed 's/"//g'这将取代所有的"没有字符的字符,末尾的g告诉sed对每个">

我看到你编辑了这个问题,这里是对新的文本输出的更新:

$ cat file
"a1;"b1";"c1";"d1""
"a2;"b2";"c2";"d2""
$ cat file | sed 's/"//g' | sed 's|\||g' 
a1;b1;c1;d1
a2;b2;c2;d2

当你需要/想在Python中这样做时:

只是去掉开头和结尾的引号:


file1 = open('abcd.csv',"r")
file2 = open('abcd-new.csv',"w")
lines = file1.readlines()
for line in lines:
if (line.startswith(""") and line.endswith(""")):
line = line[1:len(line)-1] 
print(line)
file2.write(line)
file2.close()

以及当您还需要替换":


file1 = open('abcd.csv',"r")
file2 = open('abcd-new.csv',"w")
lines = file1.readlines()
for line in lines:
if (line.startswith(""") and line.endswith(""")):
line = line[1:len(line)-1] 
line = line.replace(""","")
line = line.replace("\","")
print(line)
file2.write(line)
file2.close()

相关内容

  • 没有找到相关文章

最新更新