【问题标题】:How to get pandas.read_csv not to perform any conversions?如何让 pandas.read_csv 不执行任何转换?
【发布时间】:2016-06-09 08:36:35
【问题描述】:

例如,'/tmp/test.csv' 中的值(即,010203)旨在表示恰好匹配 @987654324 的 字符串 @,而不是整数:

In [10]: print open('/tmp/test.csv').read()
A,B,C
01,02,03

默认情况下,pandas.read_csv 将这些值转换为整数:

In [11]: import pandas

In [12]: pandas.read_csv('/tmp/test.csv')
Out[12]: 
   A  B  C
0  1  2  3

我想告诉pandas.read_csv 不要管这些值。即,不执行任何转换。此外,我希望全面应用这个“请什么也不做”指令,而不必指定任何列名或数字。

我试过了,没有任何效果:

In [13]: import csv

In [14]: pandas.read_csv('/tmp/test.csv', quoting=csv.QUOTE_ALL)
Out[14]: 
   A  B  C
0  1  2  3

唯一有效的方法是定义一个大的ConstantDict 类,并使用它的一个实例,该实例始终返回标识函数(lambda x: x)作为converters 参数的值,从而欺骗pandas.read_csv 无所事事:

In [15]: %cpaste
class ConstantDict(dict):
    def __init__(self, value):
        self.__value = value
    def get(self, *args):
        return self.__value
--
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
::::::
In [16]: pandas.read_csv('/tmp/test.csv', converters=ConstantDict(lambda x: x))
Out[16]: 
    A   B   C
0  01  02  03

要得到这样一个简单的“请什么都不做”的请求,需要做很多练习。 (如果我要让ConstantDict 防弹,那就更体操了。)

难道没有更简单的方法来实现这一点吗?

【问题讨论】:

    标签: pandas


    【解决方案1】:

    df = pd.read_csv('temp.csv', dtype=str)

    来自docs

    dtype : Type name or dict of column -> type, default None
    Data type for data or columns. E.g. {‘a’: np.float64, ‘b’: np.int32} (Unsupported with engine=’python’). Use str or object to preserve and not interpret dtype.
    

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2021-12-03
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多