Python 标记数据时出错。C错误:在第j行中预期有n个字段,通过忽略额外的列看到k修复了吗?

Python 标记数据时出错。C错误:在第j行中预期有n个字段,通过忽略额外的列看到k修复了吗?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个坏的csv文件,看起来像这样: model, height, strength 1, 124.5, 63 2, 160.4, 85 3, 144.6, 94, 88 4, 122.5, 36, 29 5, 132, 22 6, 140.6, 46, 200, 0.8 我想创建一个dataframe,它接受所有行,但忽略任何额外的列值,因此它将接受所有6行的列model、height和strength,但分别忽略第3、4、6和6行上的值88、29、200和0.8 我可以在pd.read\

我有一个坏的csv文件,看起来像这样:

model, height, strength
1, 124.5, 63
2, 160.4, 85
3, 144.6, 94, 88
4, 122.5, 36, 29
5, 132, 22
6, 140.6, 46, 200, 0.8
我想创建一个dataframe,它接受所有行,但忽略任何额外的列值,因此它将接受所有6行的列model、height和strength,但分别忽略第3、4、6和6行上的值88、29、200和0.8

我可以在pd.read\u csv中使用error\u bad\u lines=False来处理特定的行,但这会直接忽略这些行,这是我不想做的

那么熊猫有没有办法做到这一点呢

感谢您的帮助这里有一个方法:

使用任何其他分隔符读取文件:

df = pd.read_csv(pd.compat.StringIO("""model, height, strength
1, 124.5, 63
2, 160.4, 85
3, 144.6, 94, 88
4, 122.5, 36, 29
5, 132, 22
6, 140.6,46, 200, 0.8"""),sep='|')
方法1: 基于逗号分割值,并在轴=1上创建新的df和dropna

方法二:阅读后用sep='|'

我将使用

from pandas.compat import StringIO
dat = """model, height, strength
1, 124.5, 63
2, 160.4, 85
3, 144.6, 94, 88
4, 122.5, 36, 29
5, 132, 22
6, 140.6, 46, 200, 0.8"""
df = pd.read_csv(StringIO(dat), sep=',',header=None,names=range(1,10))
df=df.iloc[:,:3].T.set_index(0).T
df
0 model  height  strength
1     1   124.5        63
2     2   160.4        85
3     3   144.6        94
4     4   122.5        36
5     5     132        22
6     6   140.6        46
  model  height  strength
0     1   124.5        63
1     2   160.4        85
2     3   144.6        94
3     4   122.5        36
4     5     132        22
5     6   140.6        46
cols=df.columns.str.split(',')[0]
df=pd.DataFrame(df.iloc[:,0].str.split(',').str[:len(cols)].values.tolist(),columns=cols)
  model  height  strength
0     1   124.5        63
1     2   160.4        85
2     3   144.6        94
3     4   122.5        36
4     5     132        22
5     6   140.6        46
from pandas.compat import StringIO
dat = """model, height, strength
1, 124.5, 63
2, 160.4, 85
3, 144.6, 94, 88
4, 122.5, 36, 29
5, 132, 22
6, 140.6, 46, 200, 0.8"""
df = pd.read_csv(StringIO(dat), sep=',',header=None,names=range(1,10))
df=df.iloc[:,:3].T.set_index(0).T
df
0 model  height  strength
1     1   124.5        63
2     2   160.4        85
3     3   144.6        94
4     4   122.5        36
5     5     132        22
6     6   140.6        46