我有一个像
ID、正文、类别、子类别、数字、短信类型、短信标志
50043,"尊敬的客户,感谢您注册",,,DM-YEBA,inbox,0
30082,恭喜!您的帐户已激活。,,,DM-SBAW,inbox,0
当我使用时pd.read_csv()
,整个第一个观察结果都包含在id
列中,并且由于消息正文使用双引号而不在其他列之间分隔,而在第二个观察中,该行在列之间正确分隔。
我应该怎么做才能使第一个观察结果像这张图片一样在所有列中分开
看看 pd.read_csv 实际上在做什么。它在 id 列中进行了整个观察
当我在记事本中打开 csv 文件时,它会向整行添加额外的引号,这最终导致失败,并且文件中已有的引号用另一个 '"' 转义,如下所示。
ID、正文、类别、子类别、数字、短信类型、短信标志
"50043,""尊敬的客户,感谢您注册"",,,DM-YEBA,inbox,0"
30082,恭喜!您的帐户已激活。,,,DM-SBAW,inbox,0
主要问题在于microsoft excel的csv文件的实际保存方式。当在记事本中打开同一个 csv 文件时,它会在带有引号的行中添加额外的引号。
1)它在行的开头和结尾添加引号。
2) 它用多一个引号来转义现有的引号。因此,当我们在 pandas 中导入 csv 文件时,它将整行作为一个字符串,因此它最终都在第一列中。
为了解决这个问题——
我导入了 csv 文件并通过应用正则表达式替换更正了 csv,并将其保存为文本文件。然后我将此文本文件导入为 pandas 数据框。问题解决了。
with open('csvdata.csv','r+') as csv_file:
for line in csv_file:
# removing starting and ending quotes of a line
pattern1 = re.compile(r'^"|"$',re.MULTILINE)
line = re.sub(r'^"|"$',"",line)
# substituting escaped quote with a single quote
pattern2 = re.compile(r'""')
line = re.sub(r'""','"',line)
corrected_csv = open("new_csv.txt",'a')
corrected_csv.write(line)
corrected_csv.close()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4098 次 |
最近记录: |