Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有多个分隔符的pandas read_csv不起作用_Pandas_Csv - Fatal编程技术网

带有多个分隔符的pandas read_csv不起作用

带有多个分隔符的pandas read_csv不起作用,pandas,csv,Pandas,Csv,我需要能够用read_csv解析2种不同类型的csv,第一种是-分隔值,第二个具有,-分隔值。我需要同时做这件事 也就是说,CSV可以具有以下格式: some;csv;values;here 或者这个: some,csv,values,here 甚至混合: some;csv,values;here 我尝试了很多方法,比如下面的正则表达式,但都不起作用: data = pd.read_csv(csv_file, sep=r'[,;]', engine='python') 我对正则表达式做了

我需要能够用
read_csv
解析2种不同类型的csv,第一种是
-分隔值,第二个具有
-分隔值。我需要同时做这件事

也就是说,CSV可以具有以下格式:

some;csv;values;here
或者这个:

some,csv,values,here
甚至混合:

some;csv,values;here
我尝试了很多方法,比如下面的正则表达式,但都不起作用:

data = pd.read_csv(csv_file, sep=r'[,;]', engine='python')

我对正则表达式做了什么错误吗?

我没有读取文件,而是运行了您的代码示例 从字符串读取:

txt = '''C1;C2,C3;C4
some;csv,values;here
some1;csv1,values1;here1'''
data = pd.read_csv(io.StringIO(txt), sep='[,;]', engine='python')
并得到了一个适当的结果:

      C1    C2       C3     C4
0   some   csv   values   here
1  some1  csv1  values1  here1
请注意,sep参数甚至可以是普通(非原始)字符串, 因为它不包含任何反斜杠

因此,您可以将多个分隔符指定为正则表达式模式

代码失败的原因可能是代码划分“不一致” 将行转换为文件。也许您应该确保每一行都包含 相同数量的逗号和分号(至少不要太多)

仔细查看堆栈跟踪。应该包括一些信息 关于源文件的哪一行导致了问题。 然后查看指示的行并更正它

编辑 为了查看“失败案例”中发生的情况,我将源字符串更改为:

txt = '''C1;C2,C3;C4
some;csv,values;here
some1;csv1,values1;here1
some2;csv2,values2;here2,xxxx'''
i、 e.我添加了一行5字段(多了一个)

然后,执行上述代码会产生错误消息:

ParserError: Expected 4 fields in line 4, saw 5. ...
注意第4行中的单词,精确地指出有问题的输入行
(行号从1开始)。

我没有读取文件,而是运行了您的代码示例 从字符串读取:

txt = '''C1;C2,C3;C4
some;csv,values;here
some1;csv1,values1;here1'''
data = pd.read_csv(io.StringIO(txt), sep='[,;]', engine='python')
并得到了一个适当的结果:

      C1    C2       C3     C4
0   some   csv   values   here
1  some1  csv1  values1  here1
请注意,sep参数甚至可以是普通(非原始)字符串, 因为它不包含任何反斜杠

因此,您可以将多个分隔符指定为正则表达式模式

代码失败的原因可能是代码划分“不一致” 将行转换为文件。也许您应该确保每一行都包含 相同数量的逗号和分号(至少不要太多)

仔细查看堆栈跟踪。应该包括一些信息 关于源文件的哪一行导致了问题。 然后查看指示的行并更正它

编辑 为了查看“失败案例”中发生的情况,我将源字符串更改为:

txt = '''C1;C2,C3;C4
some;csv,values;here
some1;csv1,values1;here1
some2;csv2,values2;here2,xxxx'''
i、 e.我添加了一行5字段(多了一个)

然后,执行上述代码会产生错误消息:

ParserError: Expected 4 fields in line 4, saw 5. ...
注意第4行中的单词,精确地指出有问题的输入行 (行号从1开始)