【发布时间】:2021-04-10 15:47:18
【问题描述】:
我正在处理一个包含多种数据类型的非常大的数据框。 有两种类型的数据具有我感兴趣的一些特征,我想有效地将其转换为浮动
- 字符串变量的某些字符集可以映射为 1,其他字符映射为 0,其余字符映射为 nan
- 具有'12,34'格式的浮点数的字符串变量,函数float无法正确转换它们,因为它们有逗号而不是点,因此需要先替换它们
目前我正在这样做:
import pandas as pd
import numpy as np
dataset = pd.DataFrame({'var1':['Error', 'No Data', 'START', 'OFF'],
'var2':['2,65', '3,45', '4', '6,7089'],
'var3':['START', 'OFF', 'NON', 'Error']})
statusZero= ['STOP', 'OFF']
statusOne= ['START', 'ON']
statusNaN= ['Error', 'No Data'] # it can be everything else really
patternZero = '|'.join(statusZero)
patternOne = '|'.join(statusOne)
patternNaN = '|'.join(statusNaN)
def to_float(x):
import re
try:
x = x.replace(',', '.')
x = re.sub(patternZero, '0', x)
x = re.sub(patternNaN, 'nan', x)
x = re.sub(patternOne, '1', x)
return float(x)
except:
try:
return float(x)
except:
return np.nan
dataset = dataset.applymap(to_float)
dataset
有什么我可以替代的东西来更高效、更优雅地做到这一点吗?
【问题讨论】:
-
我认为你可以完全删除第二个 try-except 并且只有
except: return np.nan。
标签: python pandas performance dataframe numpy