使用read_csv转换StringIO时使用Pandas的奇怪输出

时间:2017-10-07 21:57:17

标签: python pandas csv stringio

当pandas CSV阅读器功能' read_csv"用于转换StringIO值在分隔某些字段时,在第二个字段的末尾附加奇怪的字符(' .1')。所需的结果是第一次测试,但所有字段在分隔符后都没有空格(',')。分裂" 1.5M,1.5M"应该总是返回" 1.5M",但是当没有空格时,它返回第二个字段" 1.5M.1" (在字段末尾添加' .1')。有没有办法解决这个问题?

>>>import pandas as pd
>>>from io import StringIO
>>>pd.read_csv(StringIO("1.5M, 1.5M"))
Empty DataFrame
Columns: [1.5M,  1.5M]
Index: []
>>> pd.read_csv(StringIO("1.5M,1.5M"))
Empty DataFrame
Columns: [1.5M, 1.5M.1]
Index: []
>>>

1 个答案:

答案 0 :(得分:3)

请注意,在第一个带空格的示例中,您的数据框的行数为零,而您的列名称包含第二列中的空格。

 df = pd.read_csv(StringIO("1.5M, 1.5M"))
 df.columns

 Index(['1.5M', ' 1.5M'], dtype='object')

在第二种情况下,也是零行,但是您有没有空格的重复列名。

 df = pd.read_csv(StringIO("1.5M,1.5M"))
 df.columns

 Index(['1.5M', '1.5M.1'], dtype='object')

因此,熊猫增加了' .1'到重复的列名。

但是,如果你想要这个' 1.5M'作为数据框中的数据,而不是列标题。

使用

df = pd.read_csv(StringIO("1.5M, 1.5M"), header=None)

或者,它在这种情况下没有区别:

df = pd.read_csv(StringIO("1.5M,1.5M"), header=None)

输出:

      0     1
0  1.5M  1.5M