将StringIO与pandas.read_csv关键字参数一起使用

时间:2015-06-09 16:06:57

标签: python pandas csv typeerror stringio

我正在尝试使用pandas.read_csv读取csv文件。我很困惑,因为代码在csv手动输入时有效。

from six.moves import cStringIO as StringIO

Companies="""
Top,       Equipment,  Users, Neither 
Company 1,       0,     0,  43
Company 2,       0,     0,  32
Company 3,       1,     3,  20
Company 4,       9,     3,  9
Company 5,       8,      7, 3
Company 6,       2,     7,  8
Company 7,       5,     2,  1
Company 8,       1,     4,  1
Company 9,       5,     1,  0
Company 10,      1,     1,  3
Company 11,      2,     2,  0
Company 12,      0,     1,  1
Company 13,      2,     0,  0
Company 14,      1,     0,  0
Company 15,      1,     0,  0
Company 16,      0,     1,  0
"""

使用:

df = pd.read_csv(StringIO(Companies),
                 skiprows=1,
                 skipinitialspace=True,
                 engine='python')

^^以上作品!

然而,当我尝试从单独的csv读取数据时,我不断收到错误。

我试过了:

df = pd.read_csv(StringIO('MYDATA.csv', nrows=17, skiprows=1,skipinitialspace=True, delimiter=','))

并得到错误TypeError:StringIO()不接受任何关键字参数 最初我得到错误TypeError:必须是可转换为缓冲区,而不是DataFrame,但我不记得我是如何摆脱该错误。

我查了一下StringIO文档和其他网站,包括: https://newcircle.com/bookshelf/python_fundamentals_tutorial/working_with_files但是我被卡住了!

1 个答案:

答案 0 :(得分:2)

您在错误的位置关闭了括号:

df = pd.read_csv(StringIO('MYDATA.csv', nrows=17, skiprows=1,skipinitialspace=True, delimiter=','))
#                        ^            ^ not closed here

您将移动右括号以关闭StringIO()调用并保留pd.read_csv()调用的关键字参数:

df = pd.read_csv(StringIO('MYDATA.csv'), nrows=17, skiprows=1,skipinitialspace=True, delimiter=',')

请注意StringIO('MYDATA.csv')创建一个内容为MYDATA.csv的内存中文件;它打开具有该文件名的文件。如果您要在名为MYDATA.csv的文件系统上打开文件,则需要取消 StringIO来电:

df = pd.read_csv('MYDATA.csv', nrows=17, skiprows=1, skipinitialspace=True, delimiter=',')