使用Pandas方法仅格式化列的数字输入

时间:2019-03-27 13:00:04

标签: python pandas

是否有内置的pandas方法可以格式化一列的数字条目,但不能格式化同一列的字符串条目? (后者应保持不变,而不是制成NaN)。我下面的现有解决方案使用np.vectorize,因为我找不到这样的pandas函数。谢谢

import numpy as np
import pandas as pd

pth2 = 'y test result.csv'
ffmt1 = '{:.6f}'


def cond_fmt(val1):
    try:
        float(val1)
        return ffmt1.format(val1)  # also catches int & scientific
    except ValueError:
        return val1  # return the string unchanged


df1 = pd.DataFrame([['aa', 9.0],
                    ['bb', 1.3e-5],
                    ['bb', 3],
                    ['cc', '0.00013aa'],
                    ['dd', 0.25]],
                   columns=['name1', 'value1'])
print('\n')
print(df1)
'''
  name1     value1
0    aa          9
1    bb    1.3e-05
2    bb          3
3    cc  0.00013aa
4    dd       0.25
'''

# make strings before writing to disk
df1['value1'] = np.vectorize(cond_fmt)(df1['value1'])
print('\n')
print(df1)
'''
  name1     value1
0    aa   9.000000
1    bb   0.000013
2    bb   3.000000
3    cc  0.00013aa
4    dd   0.250000
'''

df1.to_csv(path_or_buf=pth2, header=True, index=False) 
'''
name1,value1
aa,9.000000
bb,0.000013
bb,3.000000
cc,0.00013aa
dd,0.250000
'''

1 个答案:

答案 0 :(得分:1)

您寻求的行为(格式化为数字,除非它不是数字,然后将其保留为字符串)不是很常见的操作。它以字符串和数字字符串的混合形式作为输出,因此您可能找不到内置的pandas方法来实现此目的。

为自定义要求编写自定义代码非常好。您的代码足够优雅,可以自我记录预期的行为。