Python:在数据帧中加载csv文件,字符串和列表逗号分隔符除外

Python:在数据帧中加载csv文件,字符串和列表逗号分隔符除外,python,pandas,replace,dataframe,Python,Pandas,Replace,Dataframe,我对格式非常糟糕的csv文件有一个特别的问题 以逗号作为分隔符,但在某些列字段字符串和列表中也包含逗号 Python中有没有一种方法可以在有熊猫或没有熊猫的情况下将csv加载到数据帧中 有这样的说法吗只要有一个(逗号),就在新列中分隔,除非它在“[]”或“”之间 或者,使用空格替换[]和“”之间的逗号的方法也可以 下面是一个结构示例(当然,原始结构中有更多的行和列): 我所拥有的: column1,column2,column3,column.4 375,"string1","string.2"

我对格式非常糟糕的csv文件有一个特别的问题 以逗号作为分隔符,但在某些列字段字符串和列表中也包含逗号

Python中有没有一种方法可以在有熊猫或没有熊猫的情况下将csv加载到数据帧中 有这样的说法吗只要有一个(逗号),就在新列中分隔,除非它在“[]”或“”之间

或者,使用空格替换[]和“”之间的逗号的方法也可以

下面是一个结构示例(当然,原始结构中有更多的行和列):

我所拥有的:

column1,column2,column3,column.4
375,"string1","string.2",["string3"]
320,"string4, string5","string6",500
345,"string7",["string8", "string9"],"string10"
我想要的是:

   column1   column2           column3                 column.4
1   375   "string1"           "string.2"              ["string3"]
2   320   "string4, string5"  "string6"                500
3   345   "string7"           ["string8", "string9"]  "string10"
以下是我尝试过的:

df = pd.read_csv("test.csv", quotechar='"')
df = pd.read_csv("test.csv", sep=(','), quotechar='"', doublequote=True)
但每次都会出现相同的错误:

pandas.parser.CParserError: Error tokenizing data. C error: Expected 18 fields in line 3, saw 19
因为它仍然在列表中分隔逗号


任何帮助都将不胜感激

在您的玩具数据集上实现这一点的整个技巧是假设如果出现撇号并且后面有空格,不要用临时分隔符替换撇号
。例如,以
“string4,string5”
-如果这可以是
“string4,string5”
(去掉空格),下面的“技巧”可能不合适。但希望能有所帮助

import pandas as pd
import re

## data in 'myfile.csv' looks like this##
##column1,column2,column3,column.4
##375,"string1","string.2",["string3"]
##320,"string4, string5","string6",500
##345,"string7",["string8", "string9"],"string10"

new_data = []
with open(r'C:\Users\Owner\Downloads\myfile.csv') as f:
  f_as_string = f.read()
  res = re.sub(',(?!\s)', '|', f_as_string)
  for i in res.split('\n'):
    new_data.append(i.split('|'))


df = pd.DataFrame(data=new_data[1:], columns=new_data[0])

## Produces this dataframe literally retaining quotes
##  column1             column2                 column3     column.4
##0     375           "string1"              "string.2"  ["string3"]
##1     320  "string4, string5"               "string6"          500
##2     345           "string7"  ["string8", "string9"]   "string10"

是的,我会为每一行使用一个正则表达式。我认为唯一比
sep
优先级更高的是
quotechar
。你能控制输入吗?你能将分隔
stringN
s的引号转义,并将未转义的引号放在其他项的周围吗?嗨,是的,我可以操作输入文件。如果我必须使用一些正则表达式来替换或重新格式化文件,我可以