-1

我正在尝试在 pandas 中使用 excel 数据,并且必须将 float64 数据转换为整数类型,但我不断收到语法错误。请注意,我是编程语言的完全新手,所以我会尽可能多地感谢帮助 - 我花了一周的时间才弄清楚如何在 pandas 中打开我的 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. 我需要保持 Spectral Type 列不变;我该怎么做呢?

  3. 我该怎么做才能以正确的表格格式放置我的数据,以便我可以绘制它?

4

1 回答 1

-1

如果Spectral Type是 中的列名xlsx,则尝试:

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']

是 dtypeobject并包含诸如M0. 这些可能是字符串。无论如何,dtype 都不能转换为int. 这就是为什么

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

引发了一个错误。相反,如果您希望将一列 dtype 转换floatintthen

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

会起作用——假设我的列名是正确的。


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

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

dtypes: float64(6), object(1)

这表示在 DataFrame 的七列中,有 6 列属于 dtype ,1 列属于float64dtype object。我根据列的名称猜测限制幅度和曝光时间属于 dtype float64,而光谱类型属于 dtype object

float64如果这个猜测是正确的,那么如果您想将它们操作为s ,则不需要更改限制幅度和曝光时间的类型。


我需要保持 Spectral Type 列不变;我该怎么做呢?

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


我该怎么做才能以正确的表格格式放置我的数据,以便我可以绘制它?

您的数据可以像这样以表格格式打印:

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

要制作绘图,您可以使用matplotlib。Pandas 还有一些绘图功能

于 2013-05-03T11:45:56.580 回答