是否有内置的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
'''
答案 0 :(得分:1)
您寻求的行为(格式化为数字,除非它不是数字,然后将其保留为字符串)不是很常见的操作。它以字符串和数字字符串的混合形式作为输出,因此您可能找不到内置的pandas方法来实现此目的。
为自定义要求编写自定义代码非常好。您的代码足够优雅,可以自我记录预期的行为。