熊猫在导入csv文件时删除空格/未知字符

时间:2019-12-30 15:55:47

标签: python-3.x pandas ubuntu

我可以下载文件:

seasons = [2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017]

epl_tables = {}
epl_seasons = {}
for year in seasons:
    start_year = str(year)[-2:]
    end_year = str(year+1)[-2:]
    season = start_year + end_year
    epl_seasons[season] = pd.read_csv("https://www.football-data.co.uk/mmz4281/{}{}/E0.csv".format(start_year, end_year)).dropna(how='all')
    epl_tables[season] = league(epl_seasons[season]) 

这很好。

但是,当我尝试通过在季节中添加2004来添加2004-05季节时,出现了问题,代码失败。

seasons = [2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017]

问题是由csv文件的第337至345行中的裁判姓名之前的空格引起的。

我可以通过手动删除空白然后从磁盘加载来解决此问题,但这显然不理想。

我尝试了多种方法使其正常工作,如下所示,但似乎无济于事,

epl_seasons[season] = pd.read_csv("https://www.football-data.co.uk/mmz4281/{}{}/E0.csv".format(start_year, end_year), delimiter=',', encoding="utf-8", skipinitialspace=True).dropna(how='all')

一个潜在的复杂性是,当我在excel中打开文件时,该空间显示为空白,但是随后我在libreCalc中打开它(在Ubuntu中,这是我正在使用的东西),它显示为一个未知字符,这是一个问题在以45度倾斜的黑匣子中标记。在下面的链接中查看PeterMau的答案,以了解此未知字符的外观。

https://ask.libreoffice.org/en/question/113125/characters-turned-into-question-marks/

有人可以告诉我谁可以自动删除这些空格/未知字符吗?

2 个答案:

答案 0 :(得分:1)

您可以使用.str.strip():

删除字符串中的空格。
epl_seasons[season]['COLUMN NAME'] = epl_seasons[season]['COLUMN NAME'].str.strip()

这不应该是手动过程。只需添加一行,以便在导入CSV文件时也可以清理有问题的列。

显然,这仅适用于特定列。这是一个针对不同线程的答案,该线程致力于消除每个df单元中的空白:

Pythonic/efficient way to strip whitespace from every Pandas Data frame cell that has a stringlike object in it

答案 1 :(得分:0)

只需在我的数据列上运行str.strip()函数,并传递导致问题的字符,就我而言,该字符就是?,如下所示:

df[newcol]= df[oldCol].str.strip('?')