簡體   English   中英

Python - 將數據幀列格式化為不同的數據類型

[英]Python - format dataframe columns as different datatypes

我有一個數據幀:

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格式化為float'4.2f',將列b格式化為strftime('%Y%m'),將列c格式化為原樣(字符串,無需格式化),將列d格式化為float'8.2f' 。 如何將此格式化程序列表傳遞給dataframe df?

謝謝,

如果從格式化程序列表切換到基於列的映射,則可以在數據style.format上使用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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM