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

标签 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]})

enter image description here

我有一个格式化程序列表:

formatter = [4.2, '%Y%m%d', None, 8.2]

我想将 a 列格式化为 float '4.2f',b 列格式化为 strftime('%Y%m'),c 列按原样格式化(字符串,无需格式化),d 列格式化为 float ' 8.2f'。如何将此格式化程序列表传递给数据框 df?

谢谢

最佳答案

如果您从格式化程序列表切换到基于列的 map ,则可以在数据帧上使用 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])

关于Python-将数据框列格式化为不同的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44784545/

相关文章:

Python optparse - 选项不被读取为 false

python - 如何使用前几行的数据在数据框列上应用函数?

python - 将整列追加到字典中

python - 添加额外的列作为累积时间差

r - 在 r 中格式化数据框上的列

string - 在不指定格式字符串的情况下执行 scanf 是什么样的漏洞?

java - System.out.printf 与 System.out.format

python - 如何使用 python 和 Torrent Reactor API 下载 torrent?

Python Netsnmp 和 snmpwalk

python - 在 autodoc 中排除模块文档字符串