找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4608|回复: 3

[求助] python pandas读取CSV问题

1

主题

3

帖子

3

积分

贫民

积分
3
罗丙寅 发表于 2020-3-15 21:47:20 | 显示全部楼层 |阅读模式
由于需要对产品测试数据进行分析,想到了用Python的pandas进行数据分析,数据源是csv格式的,想到了用read_csv来读取dataframe。

但是数据源的格式很烦人,上半部分是测试的一些Summary,只有一列内容,而测试数据是逗号分隔符的标准csv格式如下图所示

批注 2020-03-15 211221.png

在pandas读入csv的时候总是会提示:pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 146, saw 126
感觉应该是两块数据区域的分隔符不同导致pandas无法读取。自己尝试将两个数据域分成两个csv文件均可以正常读取。

但是考虑到要批量处理,人工分数据域工作量太大,想通过脚本自动执行。
数据源中有一个特殊的字符SITE_NUM,初步想法是查找SITE_NUM所在行,
将SITE_NUM所在行前面的数据存为一个CSV文件,将SITE_NUM所在行后面的数据存为另一个CSV文件,再通过pandas进行处理。

在网上查找了很多方法,都不太好实现,想请教一下有什么比较好的处理方法。
最好是python直接处理,因为后续数据分析还想要用python。

附件是数据源,谢谢大家~

rawData.zip (152.59 KB, 下载次数: 2)
回复

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
罗丙寅  楼主| 发表于 2020-3-15 21:51:18 | 显示全部楼层
我用
pd.read_csv("E:\WorkSpace\Develop\DataAnalysis\AC54_PT6010EL32-AA-Cu_19882_119472_2002200583_RT1_20200222_024405.csv", sep="\t",header=None)
SumDF.columns=['Test']
SumDF = SumDF[SumDF['Test'].notnull()]
#b=SumDF[(SumDF.Test=="SITE_NUM")].index.tolist()
也无法索引到SITE_NUM所在的行,感觉是SBIN和SITE_NUM中间的三行空行中有两行是空格造成的
不知该怎么解决
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-3-17 22:36:46 | 显示全部楼层
本帖最后由 sheeboard 于 2020-3-17 22:39 编辑

仅作参考
  1. def get_site_num(file):
  2.     with open(file) as f:
  3.         for row,line in enumerate(f):
  4.             if 'SITE_NUM' in line:
  5.                 return row
  6. split_row=get_site_num('AC54_PT6010EL32-AA-Cu_19882_119472_2002200583_RT1_20200222_024405.csv')
  7. df=pd.read_csv('AC54_PT6010EL32-AA-Cu_19882_119472_2002200583_RT1_20200222_024405.csv',skiprows=range(split_row-1))
复制代码

读取的是SITE_NUM后面部分,前面部分怎么读我再去看看用那个参数,有点忘了。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
罗丙寅  楼主| 发表于 2020-3-22 21:13:23 | 显示全部楼层
sheeboard 发表于 2020-3-17 22:36
仅作参考

读取的是SITE_NUM后面部分,前面部分怎么读我再去看看用那个参数,有点忘了。 ...

感谢指点,选出SITE_NUM所在的行后面就好处理多了,
SITE_NUM后面的数据我用了:df=pd.read_csv('AC54_PT6010EL32-AA-Cu_19882_119472_2002200583_RT1_20200222_024405.csv',header=row)
SITE_NUM前面的数据我用了df=pd.read_csv('AC54_PT6010EL32-AA-Cu_19882_119472_2002200583_RT1_20200222_024405.csv',nrows=row)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表