从float64转换为整数时出现语法错误

时间:2013-05-03 11:37:50

标签: python pandas

我正在尝试在pandas中使用excel数据并且必须将float64数据转换为整数类型,但我不断收到语法错误。请注意,我是编程语言的完全新手,所以我会尽可能多地获得帮助 - 我花了一周的时间才弄清楚如何在大熊猫中打开我的excel文件,现在我遇到了问题我可以在matplotlib中使用的格式。我使用的代码如下,所以我希望有人能帮忙......

from pandas import ExcelFile
import pandas as pd
# Create ExcelFile object
xlsx = ExcelFile('filename.xlsx')
xlsx.parse(sheetname, parse_cols=6, index_col=None, na_values= ['NA']
# Convert float data types to integer
Spectral Type = Spectral Type.astype('int')

当我跑步时,我得到:

Spectral Type = Spectral Type.astype('int')
                ^
SyntaxError: invalid syntax

我做错了什么?

有没有更好的方法来访问和使用我的Excel数据,以便我可以在matplotlib中创建图形?

回复我的评论以回应unutbu,我的数据形式如下:

Type   Value1   time1  Value2   time2  Value3   time3

M0  8.87    41.11   8.41    41.11   8.16    65.78;

继续从M1到M6的值:

M6     13.95  4392.03  14.41 10395.13  14.66 25988.32

运行脚本:

`from pandas import ExcelFile`
`import pandas as pd`
`# Create ExcelFile object`
`xlsx = ExcelFile('filename.xlsx')`
`xlsx.parse(sheetname', parse_cols=6, index_col=None, na_values= ['NA'])`
`df`

(添加了解析操作中指定的列名)

返回以下输出:

<class 'pandas.core.frame.DataFrame'> Int64Index:11个条目,0到10 数据列: 光谱类型10非空值 极限幅度(1.3“)10非空值 曝光时间@ 1.3“,秒10非空值 限制幅度(2.0”)10个非空值 曝光时间@ 2.0“,秒10非空值 限制幅度(2.5“)10个非空值 曝光时间@ 2.5”,秒10个非空值 dtypes:float64(6),object(1 )`

所以,我现在要问的问题是:

  1. 如果数据是十进制数,是否有必要更改限制幅度和曝光时间列的数据类型?

  2. 我需要按原样保留光谱类型列;我该怎么做?

  3. 如何才能将数据放入正确的表格格式中,以便我可以绘制图表?

1 个答案:

答案 0 :(得分:-1)

如果Spectral Typexlsx中的列名,请尝试:

import pandas as pd
# Create ExcelFile object
xlsx = pd.ExcelFile('filename.xlsx')
df = xlsx.parse('sheetname', parse_cols=6, index_col=None, na_values= ['NA'])

Spectral Type列,

df['Spectral Type']

属于object类型,其中包含M0等值。这些可能是字符串。无论如何,dtype都无法转换为int。这就是为什么

df['Spectral Type'] = df['Spectral Type'].astype('int')

引发了错误。相反,您希望将dtype float列转换为int,然后

df['Limiting magnitude (1.3")'] = df['Limiting magnitude (1.3")'].astype('int')

会起作用 - 假设我的列名称正确。


  

是否有必要更改限制幅度的数据类型   曝光时间列,假设数据是十进制数?

在您发布的输出结束时,pandas报告

dtypes: float64(6), object(1)

这表示DataFrame中的七列中有6列是dtype float64,另一列是dtype object。我猜的是限制量级和曝光时间为dtype float64的列的名称,而频谱类型为dtype object

如果这个猜测是正确的,如果你想将它们作为float64 s进行操作,则不需要更改限制量值和曝光时间的类型。


  

我需要按原样保留光谱类型列;我该怎么做?

我不明白这个问题。请详细说明?


  

如何才能将数据放入正确的表格格式,   所以我可以用它来图表吗?

您的数据可以以表格形式打印,如下所示:

pd.set_option('display.max_columns', 7)
print(df)

要制作情节,您可以使用matplotlib。熊猫还有一些functions for plotting