使用pandas.read_csv时忽略无关的逗号

时间:2016-12-30 23:46:47

标签: python csv pandas

我正在使用一个开放数据集来记录1999年至2015年期间学校的注册情况。但是,即使这些列为空,数据集也会在CSV中预先分配列,即使这些列为空。

可以在http://www.gov.pe.ca/opendata/OD9%20Offical%20School%20Enrollments%201999%20-2015.csv

查看数据

这是我的代码:

#Read current open data set (OD34) from URL and store in an array called enrollment
url = "http://www.gov.pe.ca/opendata/OD9%20Offical%20School%20Enrollments%201999%20-2015.csv?"
col_names = ['School_Name','1999','2000','2001','2002','2003','2004','2005','2006','2007','2008','2009','2010','2011','2012','2013','2014','2015']
enrollment = pandas.read_csv(url, header=None, skiprows=1, names=col_names, nrows=2)
print(enrollment)
print(enrollment.shape)
print(type(enrollment))

代码确实会转换值,但过多的逗号意味着每所学校都有数十个NaN值。 DataFrame确实显示为2,18个数组,但print(enrollment)显示NaN值。

编辑:我在pandas.read_csv语句中添加了na_filter=False,当我print(enrollment)时,无关的NaN值消失了,但看起来每列(一年)都有所有数据而不是对齐每年的入学人数。

以下是数据的示例。

School Name,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Alberton Elementary School,229,231,237,213,225,218,219,214,194,186,167,175,178,158,148,129,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

1 个答案:

答案 0 :(得分:0)

我这样解析它:

pandas.read_csv(url, index_col=0).filter(regex='\d{4}')

看起来像这样

enter image description here

它在做什么

  • index_col=0告诉pandas第一列是索引。这看起来很合理,在查看结果后,感觉很合适。
  • 默认情况下,read_csv会假设有一个标题行。好吧。
  • filter(regex='\d{4}')只会传递带有四位数字标题的列。

因此,请确保将其分配给所需的数据框变量。

enrollment = pandas.read_csv(url, index_col=0).filter(regex='\d{4}')