Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将数据帧列格式化为不同的数据类型_Python_Dataframe_Format - Fatal编程技术网

Python-将数据帧列格式化为不同的数据类型

Python-将数据帧列格式化为不同的数据类型,python,dataframe,format,Python,Dataframe,Format,我有一个数据帧: df = pd.DataFrame({'a':[1,2,3], 'b':['2017/01/01', '2017/01/02','2016/12/31'], 'c':['aaa', 'bbb', 'ccc'], 'd':[4,5,6]}) 我有一个格式化程序列表: formatter = [4.2, '%Y%m%d', None, 8.2] 我想将a列格式化为浮点“4.2f”,将b列格式化为strftime“%Y%m”,将c列格式化为字符串,无需对其进行格式化,将d列格式化

我有一个数据帧:

df = pd.DataFrame({'a':[1,2,3], 'b':['2017/01/01', '2017/01/02','2016/12/31'], 'c':['aaa', 'bbb', 'ccc'], 'd':[4,5,6]})
我有一个格式化程序列表:

formatter = [4.2, '%Y%m%d', None, 8.2]
我想将a列格式化为浮点“4.2f”,将b列格式化为strftime“%Y%m”,将c列格式化为字符串,无需对其进行格式化,将d列格式化为浮点“8.2f”。如何将此格式化程序列表传递给dataframe df


谢谢,

如果您从格式化程序列表切换到基于列的映射,则可以在数据帧上使用style.format

差不多

import pandas as pd
import datetime

def time_formatter(data):
    return datetime.datetime.strptime(data, "%Y/%m/%d").date().strftime('%Y%m%d')

df = pd.DataFrame({'a':[1,2,3], 'b':['2017/01/01', '2017/01/02','2016/12/31'], 'c':['aaa', 'bbb', 'ccc'], 'd':[4,5,6]})

formatter = {'a':'{:4.2f}', 'b': time_formatter, 'd':'{:8.2f}'}

df.style.format(formatter)
将输出

    a       b           c   d
0   1.00    20170101    aaa 4.00
1   2.00    20170102    bbb 5.00
2   3.00    20161231    ccc 6.00
编辑:

必须有一种更干净的方法,但要使用以下格式实际更新数据帧,您可以执行以下操作:

df['a'] = df['a'].map('{:4.2f}'.format)
df['d'] = df['d'].map('{:8.2f}'.format)
df['b'] = df['b'].map(time_formatter)
或者以一种更一般、更神秘的方式:

formatter = {'a':'{:4.2f}'.format, 'b': time_formatter, 'd':'{:8.2f}'.format}

for f in formatter.items():
    column = f[0]
    df[column] = df[column].map(f[1])

有没有一种方法我不必使用df.style?因为我需要将其导出为.csv或.dat文件,所以使用样式将不允许我这样做。谢谢