首页 > 解决方案 > 从python中的csv数据绘制

问题描述

我是 python 新手,正在练习 csv 数据操作。现在我有一种情况,我有 100 * 4 个数据,其中第 i 行对应于第 i 个示例 (x_i, y_i) 第 1,2 和 3 列用于每个输入变量 (x_1, x_2, 1) abd 4 -th 列是输出 y。然后,确定适当的常数 (a,b)(这里假设为 (6, 5))。

现在我要绘制图形,x 轴为 ax_1+bx_2,y 轴为 y。

这是数据的一部分。

"x1","x2","1","y"
-0.626453810742332,-0.620366677224124,1,0.28239638205273
0.183643324222082,0.0421158731442352,1,1.73290072129656
-0.835628612410047,-0.910921648552446,1,-0.293950695808836

这是我试图完成的代码

import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':

    x1 = []
    x2 = []
    y = []
    a = 6
    b = 5

    with open('data.csv', 'r') as f:
        lines = f.readlines()
        tmp_x1 = np.array(lines)[:,0]
        tmp_x2 = np.array(lines)[:,1]
        tmp_y = np.array(lines)[:,3]
        x1.append(tmp_x1)
        x2.append(tmp_x2)
        y.append(tmp_y)

    ax1 = list()
    bx2 = list()

    for i in range(100):
        ax1.append(a * x1)
        bx2.append(b * x2)

    plt.figure()
    plt.xlabel('a*x1 + b*x2')
    plt.ylabel('y')
    plt.plot(ax1 + bx2, y)

这段代码给了我错误

IndexError:数组的索引过多

有人可以帮我解决这个问题吗?

[编辑][图表] 1

代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.csv')

a,b = 6,5

df['x'] = df['x1']*a + df['x2']*b

plt.figure()
plt.plot(df['x'], df['y'])
plt.show()

标签: pythonpython-3.xnumpymatplotlib

解决方案


f.readlines()将读取文件中的所有内容并将其放入列表中。该列表只是一个一维数组,长度为文件中的数字。您可以使用 numpy 函数genfromtxt将数据直接加载到 numpy 数组中

lines = np.genfromtxt('data.csv', delimiter=',' ,skip_header=1)

推荐阅读