csvkit:对于csv to Table,如何在

时间:2016-03-03 07:04:03

标签: python csv csvkit

使用csvkit时,我无法防止字符数据转换为数字数据。 对于下面的示例,我的第一列被转换为'int'

数据:(test.csv)

"BG_ID_10","DisSens_2010","PrivateNeglect_2010"
"250250001001",0.506632168908,0.363523524561
"250250001004",0.346632168908,0.352456136352

代码段:

from csvkit import sql as csvkit_sql
from csvkit import table
from csv import QUOTE_NONNUMERIC

fh = open('test.csv', 'rb')

csv_table = table.Table.from_csv(f=fh,\
                        name='tname',\
                        delimiter=',',\
                        quotechar='"',\
                        snifflimit=0,\
                        )

for col in csv_table:
    print col.name, col.type

输出:

BG_ID_10 <type 'int'>
DisSens_2010 <type 'float'>
PrivateNeglect_2010 <type 'float'>

我有一个工作黑客,但会感谢任何帮助更好的参数“from_csv”或替代建议。 (注意,在此步骤之后,csvkit命令用于生成Postgres create table语句。)

工作黑客:

char_col = csv_table[0] # get first column
char_col.type = unicode # change type
for idx, val in enumerate(char_col):  # force to unicode
    char_col[idx] = u'%s' % val

1 个答案:

答案 0 :(得分:1)

您可以在infer_types=False来电中添加from_csv。所有类型都将成为unicode

BG_ID_10 <type 'unicode'>
DisSens_2010 <type 'unicode'>
PrivateNeglect_2010 <type 'unicode'>

但是目前没有办法在没有building Columns yourself的情况下指定类型。