我试图将数据从xlsx文件中绘制成Pandas。经过一些小的格式化和数据质量检查后,我尝试使用matplotlib进行绘图,但得到以下错误:
TypeError: Empty 'DataFrame': no numeric data to plot
这不是一个新问题,我已经按照本网站上的许多页面处理了这个问题。遗憾的是,发布的建议对我没有用。
我的数据集包括字符串(采样点的位置,仅限于第一列),日期(我已使用pd.to_datetime
转换为正确的格式),许多NaN
条目(不能是由于我们正在进行的图形分析,转换为零),列标题代表各种分析参数。
根据我在本网站上阅读的一些建议,我尝试了以下代码
df = df.astype(float)
给出了以下错误ValueError: could not convert string to float: 'Site 1'
(网站1是抽样地点)
df = df.apply(pd.to_numeric, errors='ignore')
给出了以下内容:dtypes: float64(13), int64(1), object(65)
,因此大多数数据仍然是对象,因此无法正常工作。日期条目是int64,我无法弄清楚为什么有些数据列是float64而有些仍然是对象
df = df.apply(pd.to_numeric, errors='coerce')
会删除整个DataFrame,可能是因为此操作使用NaN
填充整个DataFrame?
我感到困惑,并希望有任何见解。
修改
我能够根据一些反馈解决自己的问题。这对我有用:
df = "path"
header = [0] # keep column headings as first row of original data
skip = [1] # skip second row, which has units of measure
na_val = ['.','-.','-+0.01'] # Convert spurious decimal points that have
# no number associated with them to NaN
convert = {col: float for col in (4,...,80)} # Convert specific rows to
# float from original text
parse_col = ("A","C","E:CC") # apply to specific columns
df = pd.read_excel(df, header = header, skiprows = skip,
na_values = na_val, converters = convert, parse_columns = parse_col)
答案 0 :(得分:1)
没有数据样本很难回答,但如果您确定数字列是100%数字,这可能会有效:
for c in df.columns:
try:
df[c] = df[c].astype(int)
except:
pass