在没有NA值的情况下更改数据类型,还是在读取数据类型时更改?

2024-06-16 08:58:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv测向头():

marker_name     ars120_pos  snp_bs  ars120_chrn
0   ARS-BFGL-BAC-10172  5342658.0   [A/G]   2.0
1   ARS-BFGL-BAC-1020   6889656.0   [T/C]   14.0
2   ARS-BFGL-BAC-10245  NA          [T/C]   14.0
3   ARS-BFGL-BAC-10345  5105727.0   [A/C]   14.0
4   ARS-BFGL-BAC-10365  25323952.0  [A/C]    NA

那个DF有几百万行。我想把float的数据类型改为int32。 我试过:

ARS1_2 = ARS1_2.astype({'marker_name':'str','ars120_pos':'int32','snp_bs':'str','ars120_chrn':'int32'})

但我有

ValueError: Cannot convert non-finite values (NA or inf) to integer

如果我认为这是平均值,我不能把NA改成整数。好的。我可以去掉NA,但在cols中,我可以用X-Y染色体的符号“X”,“Y”-作为字符串。我知道我可以把它改成int,比如99和98,但是我想避免它。你知道吗

所以我的问题是: 将列中的所有浮点值更改为整数的最简单方法是什么? 我试过像这样的东西

if type(value) in col == float:
   value.as_int

(这当然是伪代码,我不记得确切的代码)但它不太管用。。。而这只是一场有规律的if的游戏。也许我可以在熊猫身上做得更好更简单?你知道吗

我在网上看到过类似的帖子,但没有找到适合我的。请看上面的那条线。你知道吗


Tags: nameposbsfloatmarkernasnpstr
1条回答
网友
1楼 · 发布于 2024-06-16 08:58:25

要将浮点列更改为整数列,请使用以下命令:

df[col] = df[col].astype(pd.Int32Dtype()) # For single column - instead col put column name

如果要同时浏览所有列:

for col in df.columns:
    if df[col].dtype == np.float:
        df[col] = df[col].astype(pd.Int32Dtype())

要检查列的类型,请执行以下操作:

df.dtypes

Output:
    marker_name    object
    ars120_pos      Int32
    snp_bs         object
    ars120_chrn     Int32
    dtype: object

相关问题 更多 >