Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从列表中删除缺失y数据的对应x值?_Python_Python 3.x_List_Matplotlib_Plot - Fatal编程技术网

Python 如何从列表中删除缺失y数据的对应x值?

Python 如何从列表中删除缺失y数据的对应x值?,python,python-3.x,list,matplotlib,plot,Python,Python 3.x,List,Matplotlib,Plot,当我绘制这张图时,y轴看起来非常偏离。意识到我需要删除列表中的“”空格, 我试过这个方法: import matplotlib.pyplot as plt #for graphing data import numpy as np plt.figure() x = col1 = [2011.005, 2012.6543, 2013.3456, 2014.7821, 2015.3421, 2016.7891, 2017.0173, 2018.1974] col2 = [1.4356, &quo

当我绘制这张图时,y轴看起来非常偏离。意识到我需要删除列表中的“”空格, 我试过这个方法:

import matplotlib.pyplot as plt #for graphing data
import numpy as np

plt.figure()

x = col1 = [2011.005, 2012.6543, 2013.3456, 2014.7821, 2015.3421, 2016.7891, 2017.0173, 2018.1974]
col2 = [1.4356, "", 5.32245, 6.542, 7.567, .77558, "", ""]
col3 = [1.3345, 2.345, "", 5.356, 3.124, 6.12, "", ""]
col4 = [0.67, 4.235, "", 6.78, "", "", 9.56, ""]

plt.plot(col1, col2, label="Sample 1")
plt.plot(col1, col3, label="Sample 2")
plt.plot(col1, col4, label="Sample 3")
这显示了一个尺寸误差。
我不知道如何只将x的对应值提取为y值。

您可以使用pandas'
pd.to_numeric(…,errors='concurve')
将列表中的每个字符串转换为。(Numpy的
np.genfromtxt(np.array(…,dtype=str))
做了类似的事情,但也删除了空字符串)

nan
打印时将跳过值。Matplotlib将其x值列表放在相应y值的旁边,例如第一对x值为
2011.005,第二对x值为
2012.6543,np.nan
。具有一个或两个
nan
值的每一对都不会被绘制

下面是一些示例代码:

导入matplotlib.pyplot作为plt
作为pd进口熊猫
col1=[2011.005、2012.6543、2013.3456、2014.78212015.34212016.78912017.01732018.1974]
col2=[1.4356,”,5.32245,6.542,7.567,.77558,”,“”]
col3=[1.3345,2.345,”,5.356,3.124,6.12,“,”]
col4=[0.67,4.235,”,6.78,”,9.56,”]
col1=pd.to_numeric(col1,errors='concure')
col2=pd.to_numeric(col2,errors='concure')
col3=pd.to_numeric(col3,errors='concure')
col4=pd.to_numeric(col4,errors='concure')
plt.图()
plt.plot(col1,col2,“b.”,线宽=1,label=“样本1”)
plt.绘图(col1,col3,“g.”,线宽=1,label=“样本2”)
plt.绘图(col1,col4,“r.”,线宽=1,label=“样本3”)
plt.legend()
plt.show()

尚不清楚您的csv文件的外观。下面的示例假设该文件看起来像
csv\u as\u str
。(
StringIO
是一个函数,可以让您用字符串模拟文件,因此更容易添加到帖子中。从文件中读取只需
df=pd.read\u csv('your\u file.csv')

将熊猫作为pd导入
从io导入StringIO
csv_as_str='''
col1,col2,col3,col4
2011.005,1.4356,1.3345,0.67
2012.6543,,2.345,4.235
2013.3456,5.32245,,
2014.7821,6.542,5.356,6.78
2015.3421,7.567,3.124,
2016.7891,0.77558,6.12,
2017.0173,,,9.56
2018.1974,,,
'''
df=pd.read\u csv(StringIO(csv\u as\u str))
然后,数据帧已经为空点设置了
nan

x1 = []
y1 = []
for index in range(len(col2)):
    if (col2[index] != ""):
        y1.append(col2[index])
        x1.append(col1[index])

x2 = []
y2 = []
for index in range(len(col3)):
    if (col3[index] != ""):
        y2.append(col3[index])
        x2.append(col1[index])

x3 = []
y3 = []
for index in range(len(col4)):
    if (col4[index] != ""):
        y3.append(col4[index])
        x2.append(col1[index])

print(x2) #showed that there were 9 values for x2 and 5 values for x1
print(y2)

plt.plot(x1, y1, "b.", linewidth = 1, label="Sample 1")
plt.plot(x2, y2, "g.", linewidth = 1, label="Sample 2")
plt.plot(x3, y3, "k.", linewidth = 1, label="Sample 3")

plt.title("Testing", fontsize=16)

plt.show()

您可以使用pandas'
pd.to_numeric(…,errors='concurve')
将列表中的每个字符串转换为。(Numpy的
np.genfromtxt(np.array(…,dtype=str))
做了类似的事情,但也删除了空字符串)

nan
打印时将跳过值。Matplotlib将其x值列表放在相应y值的旁边,例如第一对x值为
2011.005,第二对x值为
2012.6543,np.nan
。具有一个或两个
nan
值的每一对都不会被绘制

下面是一些示例代码:

导入matplotlib.pyplot作为plt
作为pd进口熊猫
col1=[2011.005、2012.6543、2013.3456、2014.78212015.34212016.78912017.01732018.1974]
col2=[1.4356,”,5.32245,6.542,7.567,.77558,”,“”]
col3=[1.3345,2.345,”,5.356,3.124,6.12,“,”]
col4=[0.67,4.235,”,6.78,”,9.56,”]
col1=pd.to_numeric(col1,errors='concure')
col2=pd.to_numeric(col2,errors='concure')
col3=pd.to_numeric(col3,errors='concure')
col4=pd.to_numeric(col4,errors='concure')
plt.图()
plt.plot(col1,col2,“b.”,线宽=1,label=“样本1”)
plt.绘图(col1,col3,“g.”,线宽=1,label=“样本2”)
plt.绘图(col1,col4,“r.”,线宽=1,label=“样本3”)
plt.legend()
plt.show()

尚不清楚您的csv文件的外观。下面的示例假设该文件看起来像
csv\u as\u str
。(
StringIO
是一个函数,可以让您用字符串模拟文件,因此更容易添加到帖子中。从文件中读取只需
df=pd.read\u csv('your\u file.csv')

将熊猫作为pd导入
从io导入StringIO
csv_as_str='''
col1,col2,col3,col4
2011.005,1.4356,1.3345,0.67
2012.6543,,2.345,4.235
2013.3456,5.32245,,
2014.7821,6.542,5.356,6.78
2015.3421,7.567,3.124,
2016.7891,0.77558,6.12,
2017.0173,,,9.56
2018.1974,,,
'''
df=pd.read\u csv(StringIO(csv\u as\u str))
然后,数据帧已经为空点设置了
nan

x1 = []
y1 = []
for index in range(len(col2)):
    if (col2[index] != ""):
        y1.append(col2[index])
        x1.append(col1[index])

x2 = []
y2 = []
for index in range(len(col3)):
    if (col3[index] != ""):
        y2.append(col3[index])
        x2.append(col1[index])

x3 = []
y3 = []
for index in range(len(col4)):
    if (col4[index] != ""):
        y3.append(col4[index])
        x2.append(col1[index])

print(x2) #showed that there were 9 values for x2 and 5 values for x1
print(y2)

plt.plot(x1, y1, "b.", linewidth = 1, label="Sample 1")
plt.plot(x2, y2, "g.", linewidth = 1, label="Sample 2")
plt.plot(x3, y3, "k.", linewidth = 1, label="Sample 3")

plt.title("Testing", fontsize=16)

plt.show()

从概念上讲,您要做的是迭代讨论中的两个数组,并且仅在两个数组都有“数据”的情况下绘制值。有更优雅的方法可以做到这一点(参见@JohanC),但在这方面,您可以通过查看以下内容获得一些价值:

        col1     col2    col3   col4
0  2011.0050  1.43560  1.3345  0.670
1  2012.6543      NaN  2.3450  4.235
2  2013.3456  5.32245     NaN    NaN
3  2014.7821  6.54200  5.3560  6.780
4  2015.3421  7.56700  3.1240    NaN
5  2016.7891  0.77558  6.1200    NaN
6  2017.0173      NaN     NaN  9.560
7  2018.1974      NaN     NaN    NaN

从概念上讲,您要做的是迭代讨论中的两个数组,并且仅在两个数组都有“数据”的情况下绘制值。有更优雅的方法可以做到这一点(参见@JohanC),但在这方面,您可以通过查看以下内容获得一些价值:

        col1     col2    col3   col4
0  2011.0050  1.43560  1.3345  0.670
1  2012.6543      NaN  2.3450  4.235
2  2013.3456  5.32245     NaN    NaN
3  2014.7821  6.54200  5.3560  6.780
4  2015.3421  7.56700  3.1240    NaN
5  2016.7891  0.77558  6.1200    NaN
6  2017.0173      NaN     NaN  9.560
7  2018.1974      NaN     NaN    NaN

对于第2列和第x列,(2012.6543,“”)变为(2012.6543,nan),因此不会显示为情节?我很抱歉,我是python新手,所以一切似乎都是压倒性的。我想我正在尝试使用Pandastank,谢谢你的帮助!我试着进口熊猫,但它似乎不起作用,关于如何做的说明似乎也冲突。谢谢你的帮助!对于第2列和第x列,(2012.6543,“”)变为(2012.6543,nan),因此不会显示为情节?我很抱歉,我是python新手,所以一切似乎都是压倒性的。我想我正在尝试使用Pandastank,谢谢你的帮助!我试着进口熊猫,但它似乎不起作用,关于如何做的说明似乎也冲突。谢谢你的帮助!非常感谢你!非常感谢你!我已将第一个版本编辑为我的CSV,它看起来是正确的!非常感谢你!我花了3天的时间来编写代码,认为我已经完成了,无法格式化刻度。就在那时,我记下了我的密码是错的。我无法表达我的感激之情!您好,很抱歉再次打扰您,但您知道如何添加多个线性资源吗