2017-01-09 69 views
0

我有这样一个数据帧:熊猫数据帧逗号,注意分隔为数据类型

import pandas as pd 
trx = { 
    'transaction_id': [1,2], 
    'date': ['1/1/2017','1/2/2017'], 
    'sale_amt': [50.25,99.30], 
    'user': ['foo','bar'] 
    } 
df = pd.DataFrame(trx, columns = ['transaction_id','date','sale_amt','user']) 
df 

    transaction_id  date sale_amt user 
0    1 1/1/2017  50.25 foo 
1    2 1/2/2017  99.30 bar 

现在我要做的是这个小的数据帧转换为逗号分隔的列表的每一行,我已经设法做到这样:

df2 = df.apply(lambda row: ','.join(map(str,row)),axis=1) 
df2 

0 1,1/1/2017,50.25,foo 
1  2,1/2/2017,99.3,bar 

够公平的,但我希望这是更具活力。我想要单引号来包装文本和日期字段。所以我想我可以与所有的数据类型创建一个列表,并从那里,但我不知道该怎么做......

coltypes = ["int","date","num","text"] 

所需的输出:

0 1,'1/1/2017',50.25,'foo' 
1  2,'1/2/2017',99.3,'bar' 

如何使用coltypes数据类型列表实现所需的输出?

回答

3

如果您在调用df.to_csv()函数时没有指定path_or_buf参数,它将以字符串形式返回CSV文件内容。之后,我们可以把它分成不同的行:

In [291]: import csv 

In [292]: pd.Series(df.to_csv(header=None, index=False, 
    ...:      quoting=csv.QUOTE_NONNUMERIC).split(), 
    ...:   index=df.index) 
    ...: 
Out[292]: 
0 1,"1/1/2017",50.25,"foo" 
1  2,"1/2/2017",99.3,"bar" 
dtype: object 
0

使用repr()会得到您的具体情况进行快速和容易的工作。

import pandas as pd 
trx = { 
    'transaction_id': [1,2], 
    'date': ['1/1/2017','1/2/2017'], 
    'sale_amt': [50.25,99.30], 
    'user': ['foo','bar'] 
    } 

trx['date'] = list(map(repr, trx['date'])) 
trx['user'] = list(map(repr, trx['user'])) 

另外,您还可以将repr()功能在整个数据框的数字字段将不会显示他们周围的单引号。