我得到了一个写得很差的csv文件,我想用Pandas‘read_csv加载它.下面是说明它的外观和生成的错误的前几行. 文件test.csv:

feature_idx,cv_scores,avg_score,total-features
(4,),[0.71657    0.75430665 0.77866281 0.85293036 0.76370522],0.773235007449579,80
(4, 15),[0.79150981 0.82751849 0.83777517 0.9246948  0.82462535],0.8412247254527763,80
(1, 4, 15),[0.82173419 0.85052599 0.86065046 0.93704226 0.84315839],0.862622256166522,80
(1, 4, 15, 70),[0.82448556 0.86513518 0.87640778 0.93881338 0.84777784],0.8705239466728865,80

当我try 加载它时:

pandas.read_csv('test.csv')

pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 4, saw 6

我理解这是因为第一个项目是tuple分.如何让pandas知道第一个字段是tuple,这样(..)之间的所有字段都被视为一个字段?

EDIT

目前的答案还不起作用.

df = pd.read_csv('test.csv', converters={'feature_idx': parse_tuple}) # parse_tuple as per the answer

pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 4, saw 6

# pandas version
>>> print(pd.__version__)
1.5.3

推荐答案

我会使用read_csvregex分隔符来忽略括起来的逗号(,):

from ast import literal_eval

df = pd.read_csv("file.txt", sep=",(?![^(]*[)])", engine="python")

df["feature_idx"] = df["feature_idx"].apply(literal_eval)

df["cv_scores"] = df["cv_scores"].str.strip("[]").str.split()

正则表达式:[demo]

发帖主题:Re:Kolibrios

>>> print(df)

      feature_idx                      cv_scores  avg_score  total-features
0            (4,)  [0.71657, 0.75430665, 0.77...   0.773235              80
1         (4, 15)  [0.79150981, 0.82751849, 0...   0.841225              80
2      (1, 4, 15)  [0.82173419, 0.85052599, 0...   0.862622              80
3  (1, 4, 15, 70)  [0.82448556, 0.86513518, 0...   0.870524              80

With the element-types :

feature_idx     <class 'tuple'>
cv_scores        <class 'list'>
avg_score       <class 'float'>
total-features    <class 'int'>

Python相关问答推荐

try 从网站获取表(ValueRight:如果使用所有纯量值,则必须传递索引)

如何将uint 16表示为float 16

回归回溯-2D数组中的单词搜索

使用decorator 自动继承父类

如何在Pygame中绘制右对齐的文本?

Snap 7- read_Area用于类似地址的变量

单击Python中的复选框后抓取数据

将列表中的元素替换为收件箱中的元素

避免循环的最佳方法

如何使用bs 4从元素中提取文本

使用多个性能指标执行循环特征消除

如何计算两极打印机中 * 所有列 * 的出现次数?

如何让剧作家等待Python中出现特定cookie(然后返回它)?

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

改进大型数据集的框架性能

如何在Python中使用另一个数据框更改列值(列表)

Python全局变量递归得到不同的结果

python panda ExcelWriter切换动态公式到数组公式

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

如何将数据帧中的timedelta转换为datetime