Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Python pandas read_csv,最后一列包含逗号_Python_Json_Csv_Pandas - Fatal编程技术网

Python pandas read_csv,最后一列包含逗号

Python pandas read_csv,最后一列包含逗号,python,json,csv,pandas,Python,Json,Csv,Pandas,因此,我有一个csv数据集,根据我的书,它是格式良好的,我正在尝试让pandas包正确加载它。标题由5个列名组成,但最后一列由JSON对象组成,这些对象包含未加修饰的逗号。e、 g A,B,C,D,E 1,2,3,4,{K1:V1,K2:V2} 我正在用一个简单的training=pd.read\u csv('data/training.dat') 然而,pandas显然将额外的逗号误解为新的未标记列,我得到了如下错误: CParserError: Error tokenizing data.

因此,我有一个csv数据集,根据我的书,它是格式良好的,我正在尝试让
pandas
包正确加载它。标题由5个列名组成,但最后一列由JSON对象组成,这些对象包含未加修饰的逗号。e、 g

A,B,C,D,E
1,2,3,4,{K1:V1,K2:V2}
我正在用一个简单的
training=pd.read\u csv('data/training.dat')

然而,pandas显然将额外的逗号误解为新的未标记列,我得到了如下错误:

CParserError: Error tokenizing data. C error: Expected 75 fields in line 3, saw 84
我正在尝试浏览文档,但显然失败了,有人知道如何正确配置
pd.read\u csv
命令来正确解析它吗


我想另一种选择是我可以用JSON对象的键的并集作为列来拼凑一个脚本,将JSON对象展平。

如果可以用
{
替换
{
,用
}
替换
}
,则可以通过以下方法正确读取:
pd.read_csv('data/training.dat',quotechar“,skipinitialspace=True)

编辑: 或者选择基于正则表达式的解决方案:

In [205]:
print pd.read_csv('a.data',sep=",(?![^{]*\})", header=None)
   0  1  2  3              4
0  A  B  C  D              E
1  1  2  3  4  {K1:V1,K2:V2}

[2 rows x 5 columns]

我认为这取决于您试图用JSON做什么。如果您只是想忽略它,可能最简单的方法是将注释字符设置为
{
(对于这一列和下一列,我假设您在其他列中没有任何大括号)

可以使用带有
read\u csv
的自定义分隔符从JSON中提取元素,尽管我不认为这是一种明智的方法。如果是捕获组,Pandas会将分隔符变成一列(内部使用
re.split
),因此我可以得到一个包含JSON的列。不幸的是,我也因此得到了大量空列;因此出现了
dropna

我通过
加载
转储
发送了JSON,不过显然您希望做一些更明智的事情。:)

示例CSV

A,B,C,D,E
1,2,3,4,{"K1":"V1","K2":"V2"}
3,2,3,4,{"K1": "V1", "k£": {"k3": "v3"},  "K2":"V2"}

无需预处理csv文件,只需使用引擎类型python:

dataset = pd.read_csv('sample.csv', sep=',', engine='python')

我真的很喜欢基于正则表达式的解决方案。我没有意识到sep可以解析正则表达式。这似乎无法解决问题。我不知道指定引擎类型将如何使列条目被解释为
dict
A,B,C,D,E
1,2,3,4,{"K1":"V1","K2":"V2"}
3,2,3,4,{"K1": "V1", "k£": {"k3": "v3"},  "K2":"V2"}
dataset = pd.read_csv('sample.csv', sep=',', engine='python')