Pandas 如何读取CSV、分隔符、分隔符错误

Pandas 如何读取CSV、分隔符、分隔符错误,pandas,csv,delimiter-separated-values,Pandas,Csv,Delimiter Separated Values,第一个我是类型: import pandas as pd df=pd.read_csv("oktober.csv", header = None, skiprows=2, engine='python') df 比pd更大的是带有分隔符的表“;” 0 模式改变:;24.10.2019 12:18:47;目标: 一, 图案编号:1;B3377;说明:;;合金 二, 净重:;0;毛重:;180 三, 烧瓶号。;模制的;国家;倾倒;国家;清空;T 四, 18222;04.11.2019 09:29:

第一个我是类型:

import pandas as pd
df=pd.read_csv("oktober.csv", header = None, skiprows=2, engine='python')
df
比pd更大的是带有分隔符的表“;”

0 模式改变:;24.10.2019 12:18:47;目标:

一, 图案编号:1;B3377;说明:;;合金

二, 净重:;0;毛重:;180

三, 烧瓶号。;模制的;国家;倾倒;国家;清空;T

四, 18222;04.11.2019 09:29:20;0;;0;08.11.2019 15:3...

4909 22319;26.11.2019 10:04:09;0;;0;;450;646;0;0;;

4910 22320;26.11.2019 10:04:54;0;;0;;450;449;0;0;;

4911 ; ; ;闵;450;584; ; ; ; ;

4912 ; ; ;马克斯;450;3781; ; ; ; ;

4913 ; ; ;平均值;450;1443; ; ; ; ;

220 18395;08.11.2019 15:34:46;0;2019年11月8日16:12:4

221 18396;08.11.2019 15:35:37;0;2019年11月8日16:13:0

222 18397;08.11.2019 15:36:25;0;2019年11月8日16:13:3

223 ; ; ;闵;450;461; ; ; ; ;

224 ; ; ;马克斯;450;8223; ; ; ; ;

225 ; ; ;平均值;450;1185; ; ; ; ;

226 模式改变:;08.11.2019 15:37:15;目标:

227 图案编号:1;B2238;说明:;;合金

228 净重:;0;毛重:

229 烧瓶号。;模制的;国家;倾倒;国家;清空;T

230 18398;08.11.2019 15:38:35;0;2019年11月8日16:14:3

当我尝试使用分隔符和定界符时,我得到了一个错误:第227行应该有7个字段,而第11行应该有7个字段

import pandas as pd
  df=pd.read_csv("oktober.csv", header = None, skiprows=2, engine='python',sep=';'  )
   df

如何解决这个问题?

显然,您的输入数据有些混乱,至少如果 每行中分号的数量与此有关

众所周知,read_csv无法很好地处理此类情况,因此采取两个步骤 方法:

  • 读取不带sep=';'的源文件参数,读取整行 进入一个单独的列(我称之为src):

  • 然后将每一行“展开”为字段序列,最好是在另一个数据帧中:

    df2 = df.src.apply(lambda txt: pd.Series(txt.split(';'))).replace(np.nan, '')
    
  • 为了避免结果中出现NaN(阻碍可见性),我将它们替换为 空字符串

    对于您的样本中的几行,我得到:

                           0                    1               2       3      4                5  6
    0    0 Pattern changed :  24.10.2019 12:18:47        Target :                                    
    1  1 Pattern number : 1                 B3377   Description :          Alloy                     
    2         2 Weight net:                     0  Weight gross:      180                            
    3            3 Flask no.              moulded           State  poured  State          Emptied  T 
    4                4 18222  04.11.2019 09:29:20               0              0  08.11.2019 15:3    
    
    也许这个结果将成为整理源文件的源材料, e、 g.识别无序的行,添加缺少的分号,然后重新阅读 (你的选择)


    还可以考虑将列名设置为一组有意义的字符串。

    要进行调试,最好查看第227行的确切内容。因为在那里它看到的列比需要的多,所以我添加了更多的列。faile的名称是src,这是我将要读取的文件的名称?文件必须是txt?文件名是什么?也许我必须在开始时键入一些特殊的imort作为txt或类似的东西?也许是那些愚蠢的问题,但我是新来的:)谢谢。最初我将pd.read_csv的第一个参数写成io.StringIO(txt),因为实际上我是从字符串变量(txt)读取的。但在“现实世界”中,您应该从文件中读取,所以现在我将input.csv放在那里。我任意假定的列名称(src)(任何名称都可以)。
                           0                    1               2       3      4                5  6
    0    0 Pattern changed :  24.10.2019 12:18:47        Target :                                    
    1  1 Pattern number : 1                 B3377   Description :          Alloy                     
    2         2 Weight net:                     0  Weight gross:      180                            
    3            3 Flask no.              moulded           State  poured  State          Emptied  T 
    4                4 18222  04.11.2019 09:29:20               0              0  08.11.2019 15:3