【问题标题】:Pandas Error: Reading one column as python Values (Float / Int Values) and other column as numpy.float64Pandas 错误:将一列读取为 python 值(Float / Int 值),另一列读取为 numpy.float64
【发布时间】:2021-04-27 02:52:26
【问题描述】:

我正在使用 Pandas 转换一些体育数据。第一列是主队数据,第二列是客队数据。

统计数据是从 Excel 文件中读取的。当我从数据框中打印字典时,所有客队统计数据都是浮点数(但许多应该是整数)。当我打印每列值的类型时,第一列将显示为整数和浮点数,而所有第二列都由 numpy.float64 值组成。

如何让两列都是整数和浮点值?

这是python脚本和输出:

import pandas as pd
import numpy as np
pd.options.mode.chained_assignment = None  # Remove warning. default='warn'
    
teams_df = pd.read_excel("STATS.xlsm", skiprows=8, nrows=12, usecols=[0,2])  
new_teams_df = teams_df.rename(columns={"Unnamed: 0": "HOME", "Unnamed: 2": "AWAY"})
new_teams_df = new_teams_df.dropna()
       
print("\n********************\n Data Frame as dict \n********************")
print(new_teams_df.to_dict())    
print("\nHome Column Row 1 Type:   " + str(type(new_teams_df.at[1,'HOME'])))
print("Away Column Row 1 Type:   " + str(type(new_teams_df.at[1,'AWAY'])))   
print("\nHome Column Row 10 Type:   " + str(type(new_teams_df.at[10,'HOME'])))
print("Away Column Row 10 Type:   " + str(type(new_teams_df.at[10,'AWAY'])))

输出

********************
 Data Frame as dict 
********************
{'HOME': {0: 342, 1: 232, 2: 110, 3: 23, 4: 27, 7: 23, 8: 0.5652, 9: 26.3, 10: 14.9, 11: 44}, 'AWAY': {0: 339.0, 1: 214.0, 2: 125.0, 3: 45.0, 4: 25.0, 7: 18.0, 8: 0.5, 9: 37.7, 10: 18.8, 11: 43.0}}

Home Column Row 1 Type:   <class 'int'>
Away Column Row 1 Type:   <class 'numpy.float64'>

Home Column Row 10 Type:   <class 'float'>
Away Column Row 10 Type:   <class 'numpy.float64'>

奇怪的问题,因为数据直接来自统计网站到 Excel 文件。两列应该完全相同。是否可以将 away 列转换回 python 对象。有些行需要是浮点数,其余行是整数。

谢谢!

【问题讨论】:

  • 您遇到了什么问题?所有这些类型都可以转换为其他类型。 numpy.float64 只是 Python float 的别名。
  • 您应该仍然可以使用这些类型,而无需对其进行转换。如果您仍想转换,请尝试df['col_name'] = df['col_name'].astype('float')
  • @TimRoberts 问题是数据框的数字应该是整数但是浮点数。我需要能够将某些行转换为整数。由于某种原因,我无法使用 numpy.float64 格式执行此操作。例如,尝试将“AWAY”列第 0 行从 numpy.float64 转换为 numpy.int64 score_df.at[0,'HOME'] = score_df.at[0,'HOME'].astype(np.int16) 仍然返回由于某种原因,它是一个 numpy.float6

标签: python python-3.x pandas dataframe numpy


【解决方案1】:

问题是 int 数据类型默认没有 Nan 值:许多值可能是空白的。分辨率是

在 0.24.+ 版中,pandas 已经获得了保存具有缺失值的整数 dtype 的能力。

可空整数数据类型。

Pandas 可以使用 arrays.IntegerArray 表示可能缺少值的整数数据。这是在 pandas 中实现的扩展类型。它不是整数的默认 dtype,不会被推断;您必须将 dtype 显式传递给 array() 或 Series:

arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype())
pd.Series(arr)

0      1
1      2
2    NaN
dtype: Int64

要将列转换为可为空的整数,请使用:

df['myCol'] = df['myCol'].astype('Int64')

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多