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

时间:2016-06-09 00:22:28

标签: pandas

例如,' /tmp/test.csv'中的值; (即010203)用于表示恰好匹配/^\d+$/字符串,而不是整数:

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

很多体操都是为了这么简单而且#34;请不要做什么"请求跨越。 (如果我要ConstantDict防弹,那将更加体操。)

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

1 个答案:

答案 0 :(得分:7)

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.