例如,在"/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防弹,那将更加体操.)
有没有更简单的方法来实现这一目标?
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)
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |