我有一个这样的数据框:
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
列表实现所需的输出?
如果在
调用函数时未指定path_or_buf
参数df.to_csv()
它将以字符串形式返回 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
使用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()
函数应用于整个数据帧,因为数值字段不会在其周围显示单引号。