如何让pandas.read_csv不执行任何转换?

kjo*_*kjo 3 pandas

例如,在"/tmp/test.csv"的值(即,01,02,03)是指表示字符串即正好匹配/^\d+$/,而不是整数:

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

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

In [11]: import pandas

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

我想告诉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
Run Code Online (Sandbox Code Playgroud)

唯一有效的方法是定义一个大的ol' ConstantDict类,并使用它的一个实例,它总是返回identity function(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
Run Code Online (Sandbox Code Playgroud)

这是一个很多体操,以获得这么简单的"请不要做"的要求.(如果我要ConstantDict防弹,那将更加体操.)

有没有更简单的方法来实现这一目标?

Ale*_*lia 8

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

来自文档:

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.
Run Code Online (Sandbox Code Playgroud)