这可能是一个非常明显的修复程序。我正在使用Python 2.7
,并且正在Spyder 3.2.4
中。我正在尝试通过阅读并绘制它来绘制csv
文件中非常简单的(尽管很大)数据。csv "df"
是[6369 rows x 2 columns]
。我的问题是,下面的代码只是出于某种原因给了我x=y graph
。如果我将row[0]
中的0's
更改为1's
,则说ValueError: invalid literal for int() with base 10: 'i'
这是代码:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('SDISKSTATS_timeMassDisk.csv', delimiter=',')
x=[]
y=[]
for row in df:
x.append(int(row[0]))
y.append(int(row[0]))
plt.plot(x,y,label='csv')
plt.xlabel('x')
plt.ylabel('y')
plt.title('pls let this work')
plt.legend()
plt.show()
这是它产生的情节
谢谢您的所有帮助。
使用 for row in df:
您在数据框架的列而不是行上迭代。要迭代行,您可以使用for i,row in df.iterrows():
。
因此,一个工作的例子看起来像:
import pandas as pd
import matplotlib.pyplot as plt
t = pd.DataFrame({"x":[1,2,3,4],"y":[5,3,4,2]})
t.to_csv('SDISKSTATS_timeMassDisk.csv', sep=',', index=False)
df = pd.read_csv('SDISKSTATS_timeMassDisk.csv', sep=',')
x=[]
y=[]
for i,row in df.iterrows():
x.append(int(row.values[0]))
y.append(int(row.values[1]))
plt.plot(x,y,label='csv')
plt.xlabel('x')
plt.ylabel('y')
plt.title('pls let this work')
plt.legend()
plt.show()
然而,迭代似乎是不必要的。您可以从数据框架中获取列并直接绘制它们:
import pandas as pd
import matplotlib.pyplot as plt
t = pd.DataFrame({"x":[1,2,3,4],"y":[5,3,4,2]})
t.to_csv('SDISKSTATS_timeMassDisk.csv', sep=',', index=False)
df = pd.read_csv('SDISKSTATS_timeMassDisk.csv', sep=',')
plt.plot(df["x"],df["y"],label='csv')
plt.xlabel('x')
plt.ylabel('y')
plt.title('pls let this work')
plt.legend()
plt.show()
或直接在数据框架上调用plot
:
import pandas as pd
import matplotlib.pyplot as plt
t = pd.DataFrame({"x":[1,2,3,4],"y":[5,3,4,2]})
t.to_csv('SDISKSTATS_timeMassDisk.csv', sep=',', index=False)
df = pd.read_csv('SDISKSTATS_timeMassDisk.csv', sep=',')
df.plot(x="x",y="y", label="csv")
plt.ylabel('y')
plt.title('pls let this work')
plt.show()
更新答案
假设您的CSV文件是这样的格式(没有列标题):
1E+08,1E+028
2E+08,4E+028
3E+08,9E+028
您可以使用数据帧本身绘制值,而无需创建任何list
s。在下面的代码中,我命名了DataFrame 'a'
和'b'
的列,但是只要您一致,您就可以将它们调用。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('SDISKSTATS_timeMassDisk.csv', delimiter=',', header=None, names=['a', 'b'])
plt.plot(df['a'], df['b'], label='csv')
plt.xlabel('x')
plt.ylabel('y')
plt.title('pls let this work')
plt.legend()
plt.show()