我想用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()