【问题标题】:Strange output using Pandas when converting StringIO with read_csv使用 read_csv 转换 StringIO 时使用 Pandas 的奇怪输出
【发布时间】:2018-03-19 10:15:29
【问题描述】:

当 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: []
>>>

【问题讨论】:

    标签: python pandas csv stringio


    【解决方案1】:

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

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

    因此,Pandas 将“.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
    

    【讨论】:

    • 感谢 Scott 的分解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多