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

Using StringIO with pandas.read_csv keyword arguments

我正在尝试使用 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() takes no keyword arguments 最初我收到错误 TypeError: Must be Convertible to a buffer, not DataFrame,但我不记得我是如何摆脱这个错误的。

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

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

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=',')