首页 > 解决方案 > ValueError: Lengths must match to compare - 从表 Pandas 中选择特定值

问题描述

我是编程新手,目前正在尝试在 Y 轴和 X 之间进行比较:(它有 3 个值),但它不能将“一到三”与我所做的代码进行比较。

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("table3.csv").drop(columns=["STUDY_ID"]) #Had to because it just spams the colunm..
LRX= df[df['Total'] == ([['L999L', 'R999R','Xray1']])]
y = df['CD2']
x = df['LRX']
plt.xlabel('Total') ; plt.ylabel('CD2')
plt.scatter(x,y)
plt.title('Matplot scatter plot')
plt.show()

Total 是包含 L999L、R999R 和 Xray1 的柱子。

我做错了什么?

    Total            CD8    CD2
    L999L           54.1059 261.105
    R999R           88.5381 67.6109
    Xray1           48.0809 404.211 

标签: pandasmaxlength

解决方案


现在这个工作:定义DataFrame:

df=pd.DataFrame({'Total':['L999L','R999R','Xray1'],'CD2':[48.43,24.54,26.13],'CD8':[43.51,54.12,65.13]})

然后你必须用数字替换 'Total' 中的字符串,以便 plot 命令知道在哪里放置刻度(注意,这里的条形图要容易得多;在那里,plot 命令在没有这种解决方法的情况下也可以工作):

ticklabels = ['L999L','R999R','Xray1']
tickdict = {'L999L': 0,'R999R': 1,'Xray1': 2}
df=df.replace({'Total':tickdict})

然后进行绘图,首先 x 轴实际上是 [0,1,2],但随后刻度名称被替换:

fig, ax = plt.subplots()
ax.scatter(df['Total'], df['CD2'])
plt.xlabel('Total') ; plt.ylabel('CD2')
ax.xaxis.set_ticks(np.arange(len(df['Total'])))
ax.xaxis.set_ticklabels(df['Total'])
ax.set_xticklabels(tickdict)
plt.show()

推荐阅读