[英]Convert strings to float in all pandas columns, where this is possible
我从列表列表中创建了一个pandas数据帧
import pandas as pd
df_list = [["a", "1", "2"], ["b", "3", np.nan]]
df = pd.DataFrame(df_list, columns = list("ABC"))
>>> A B C
0 a 1 2
1 b 3 NaN
有没有办法将数据帧的所有列转换为float,可以转换,即B和C? 如果您知道,以下工作将转换为哪些列:
df[["B", "C"]] = df[["B", "C"]].astype("float")
但是,如果您事先不知道哪些列包含数字,您会怎么做? 当我尝试
df = df.astype("float", errors = "ignore")
所有列仍然是字符串/对象。 同样的,
df[["B", "C"]] = df[["B", "C"]].apply(pd.to_numeric)
转换两列(虽然“B”是int
而“C”是“浮动”,因为存在NaN
值),但是
df = df.apply(pd.to_numeric)
显然会抛出一条错误消息,我没有看到一种方法来抑制它。
是否有可能在不循环遍历每一列的情况下执行此字符串浮点转换,尝试.astype("float", errors = "ignore")
?
我认为你需要在to_numeric
中to_numeric
参数errors='ignore'
:
df = df.apply(pd.to_numeric, errors='ignore')
print (df.dtypes)
A object
B int64
C float64
dtype: object
如果不是混合值,它工作得很好 - 带字符串的数字:
df_list = [["a", "t", "2"], ["b", "3", np.nan]]
df = pd.DataFrame(df_list, columns = list("ABC"))
df = df.apply(pd.to_numeric, errors='ignore')
print (df)
A B C
0 a t 2.0 <=added t to column B for mixed values
1 b 3 NaN
print (df.dtypes)
A object
B object
C float64
dtype: object
编辑:
您也可以向下转换int
,以float
S:
df = df.apply(pd.to_numeric, errors='ignore', downcast='float')
print (df.dtypes)
A object
B float32
C float32
dtype: object
它与:
df = df.apply(lambda x: pd.to_numeric(x, errors='ignore', downcast='float'))
print (df.dtypes)
A object
B float32
C float32
dtype: object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.