我有csv,csv的两列是指数表示法。
我想把它转换成float或int,这样做:
df = pd.read_csv('clm_data.csv', sep = ';')
pd.set_option('display.float_format', '{:.0f}'.format)
df.dtypes
这些类型:
NAME object
ID object
RESPONSE_TYPE int64
RESPONSE_DATE object
SYSTEM. object
转换函数:
def unfloater(x):
value = x.replace(',', '.')
return float(value)
当我尝试使用apply来处理多行时,比如:
df[["NAME", "RESPONSE_DATE"]] = df[["NAME", "RESPONSE_DATE"]].apply(unfloater)
我得到了TypeError:无法将序列转换为<类"float">
但当我使用申请一个系列时,一切都很好。
多重申请有什么问题?轴=1是无用的
您现在将一行而不是单个值传递给函数,因此float()
不起作用。您可以像这样使用.astype(float)
:
df = pd.DataFrame({"a": ["1,1e1", "2,2e2", "3,3e3", "4,4e4"],
"b": ["5,5e5", "6,6e6", "7,7e7", "8,8e8"]})
df[["a", "b"]].apply(lambda row: row.str.replace(",", ".")).astype(float)
您可以使用以下方法之一:
方法1:使用astype((
df['NLS'] = df['NLS'].astype(float)
方法2:使用to_numeric((将对象转换为浮点
df['NLS'] = pd.to_numeric(df['NLS'], errors='coerce')
转换所有
df = df.apply(pd.to_numeric)
df.dtypes