【发布时间】: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只是 Pythonfloat的别名。 -
您应该仍然可以使用这些类型,而无需对其进行转换。如果您仍想转换,请尝试
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