我的数据框中有一个Id列,如下所示:
a = pandas.DataFrame([12673,44,847])
此数据缺少一些值。如果我Keep_default_NA = True,则缺少的值将被NaN填充,并且数据将被读取为float,因此值将更改为
12673.0 , 44.0, 847.0
这是不需要的(我想删除NA值并转换为str / obj,因为id可以是任何长度)。 如果我keep_default_NA = False,那么其他列(例如布尔值)都将成为对象,并且我必须比较字符串值以找出true / false值。
答案 0 :(得分:0)
如果要使用NaN值,则必须有浮点数。 https://stackoverflow.com/a/38003951/3841261
使用“ keep_default_NA = True”,然后除去NaN之后,将列转换为整数。
答案 1 :(得分:0)
我无法确定没有更好的数据样本,但这也许会有所帮助:
首先读取保留dtype的数据,然后基本上再次读取它以得到正确的id
。如果布尔列也缺少值(空字符串),则需要使用 df.astype("bool")
。
df1 = pd.read_csv("test.csv", keep_default_na=True).dropna()
df2 = pd.read_csv("test.csv", keep_default_na=False)
df1["id"] = df2.loc[df1.index]["id"]
df = pd.DataFrame(df1.to_dict())
如果您不想读两次,可以用keep_default_na=False
读入,然后过滤掉带有空字符串的行,并将每一列转换为所需的dtype或df = pd.DataFrame(df1.to_dict())
。