Если вы используете astype()
, это работает.
df = pd.DataFrame({"intwithnan":[random.randint(0,100)
if random.randint(0,3)<2 else np.nan
for i in range(20)]}).astype({"intwithnan":"Int64"})
df.to_csv("nan.csv", index=False)
df = pd.read_csv("nan.csv").astype({"intwithnan":"Int64"})
print(f"{df.dtypes}\n\n{df.to_string(index=False)}")
вывод
intwithnan Int64
dtype: object
intwithnan
97
97
66
16
<NA>
<NA>
<NA>
59
23
<NA>
<NA>
95
61
<NA>
26
13
<NA>
48
84
19
дополнительный
Если вы не знаете свой столбцы, но вы хотите попытаться преобразовать их в Int64
df = pd.DataFrame({"intwithnan":[random.randint(0,100)
if random.randint(0,3)<2 else np.nan
for i in range(20)],
"stringcol":["abc" for i in range(20)]}).astype({"intwithnan":"Int64"})
df.to_csv("nan.csv", index=False)
df = pd.read_csv("nan.csv")
for c in df.columns:
try: df = df.astype({c:"Int64"})
except TypeError: pass
print(f"{df.dtypes}\n\n{df.to_string(index=False)}")