【问题标题】:Python - pandas column type casting with "astype" is not workingPython - 带有“astype”的pandas列类型转换不起作用
【发布时间】:2018-09-11 21:38:58
【问题描述】:

这是 DataFrame 的前 5 行(格式不正确,但您可以看到这些值大部分都可以转换为数字)

df.head()
ID  Overall Acceleration    Aggression  Agility Balance Ball control    Composure   Crossing    Curve   Dribbling   Finishing   Free kick accuracy  GK diving   GK handling GK kicking  GK positioning  GK reflexes Heading accuracy    Interceptions   Jumping Long passing    Long shots  Marking Penalties   Positioning Reactions   Short passing   Shot power  Sliding tackle  Sprint speed    Stamina Standing tackle Strength    Vision  Volleys
0   20801   94  89  63  89  63  93  95  85  81  91  94  76  7   11  15  14  11  88  29  95  77  92  22  85  95  96  83  94  23  91  92  31  80  85  88
1   158023  93  92  48  90  95  95  96  77  89  97  95  90  6   11  15  14  8   71  22  68  87  88  13  74  93  95  88  85  26  87  73  28  59  90  85
2   190871  92  94  56  96  82  95  92  75  81  96  89  84  9   9   15  15  11  62  36  61  75  77  21  81  90  88  81  80  33  90  78  24  53  80  83
3   176580  92  88  78  86  60  91  83  77  86  86  94  84  27  25  31  33  37  77  41  69  64  86  30  85  92  93  83  87  38  77  89  45  80  84  88
4   167495  92  58  29  52  35  48  70  15  14  30  13  11  91  90  95  91  89  25  30  78  59  16  10  47  12  85  55  25  11  61  44  10  83  70  11

这里是所有类型的描述:

df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 18085 entries, 0 to 18084
Data columns (total 36 columns):
ID                    18085 non-null int64
Overall               18085 non-null int64
Acceleration          18085 non-null object
Aggression            18085 non-null object
Agility               18085 non-null object
Balance               18085 non-null object
Ball control          18085 non-null object
Composure             18085 non-null object
Crossing              18085 non-null object
Curve                 18085 non-null object
Dribbling             18085 non-null object
Finishing             18085 non-null object
Free kick accuracy    18085 non-null object
...
dtypes: int64(2), object(34)
memory usage: 5.1+ MB

这是我将对象类型转换为浮点数的尝试。

for column in full:
    tmp = pd.Series(column)
    column = tmp.astype("float64", errors="ignore")

然后所有相关类型仍然是“对象”。

df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 18085 entries, 0 to 18084
Data columns (total 36 columns):
ID                    18085 non-null int64
Overall               18085 non-null int64
Acceleration          18085 non-null object
Aggression            18085 non-null object
Agility               18085 non-null object
Balance               18085 non-null object
Ball control          18085 non-null object
Composure             18085 non-null object
Crossing              18085 non-null object
Curve                 18085 non-null object
Dribbling             18085 non-null object
Finishing             18085 non-null object
Free kick accuracy    18085 non-null object
...
dtypes: int64(2), object(34)
memory usage: 5.1+ MB

谁能看到我做错了什么?我从这个站点和其他站点尝试了许多不同的方法,但我不明白为什么类型没有改变。任何帮助表示赞赏。谢谢。

编辑:如果这可能与此有关,我将在 Kaggle.com IPython 笔记本中执行此操作。

【问题讨论】:

  • df.apply(pd.to_numeric, errors='coerce')?
  • @Abhi 我又试了一次,类型仍然是“对象”。我不明白。
  • @conjenks df=df.apply(pd.to_numeric, errors='coerce').. 你需要重新分配它
  • @文美丽。谢谢你。
  • 你可以做df=df.astype("float64", errors="ignore")。所有可以转换的列都将被转换。

标签: python pandas dataframe casting


【解决方案1】:

将解决方案从 cmets 迁移到答案。感谢@Wen。

df=df.apply(pd.to_numeric, errors='coerce')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 2016-10-23
    • 2023-03-23
    • 2021-07-13
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多