Python新手,一般编程并尝试:
1)从文件夹中读取多个(格式相同的)CSV文件
2)在单个图上的每个CSV文件中绘制列X'时间'与列Y'pH'
3)使用文件名(不带.csv)创建图例作为图表每一行的参考。
我已经能够打开一个CSV文件并绘制X与Y的关系,但是没有成功迭代文件并在一个图上叠加多行。
任何帮助将不胜感激!我已经尝试了几种不同的方式来读取文件,我只是在下面展示其中一种。我宁愿在文件中读取单独的pandas数据表,以便我可以稍后进行maniupulate。现在,我希望只是让一些基本代码工作。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob
ferms = glob.glob ('Python/CSV/*.csv')
print ferms
for ferm in ferms:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(ferms['EFT(h)'], ferms['pH1.PV [pH]'], 'k--')
plt.xlabel('EFT(h)')
plt.ylabel('pH')
plt.show()
基于@Paul H建议的修订代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob
ferms = glob.glob ('Python/CSV/*.csv')
print ferms
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
for ferm in ferms:
# define the dataframe
data = pd.read_csv(ferm)
ax.plot(ferms[0], ferms[3], 'k--')
plt.xlabel('EFT(h)')
plt.ylabel('pH')
plt.show()
新错误:
- > 235返回数组(a,dtype,copy = False,order = order) 236 237 def asanyarray(a,dtype = None,order = None):
ValueError:无法将字符串转换为float:Python / CSV \ 20135140.csv
只是为了检查,我进入了我的csv文件并删除了标题,认为它们可能是'string to float'错误的原因。但是,即使我的csvs中只有数字,它也会引发同样的错误。
答案 0 :(得分:0)
看起来它不起作用,因为你正在为每个循环创建一个新的数字。
试试这个:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob
ferms = glob.glob ('Python/CSV/*.csv')
print ferms
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
for ferm in ferms:
# define the dataframe
data = pd.read_csv(ferm)
ax.plot(data['EFT(h)'], data['pH1.PV [pH]'], 'k--')
plt.xlabel('EFT(h)')
plt.ylabel('pH')
plt.show()
答案 1 :(得分:0)
我尝试从任意数量的文件中绘制数据时遇到了类似的问题。这是我的帖子Traceback lines on plot of multiple files的链接。基本上,您希望绘制每个文件中的数据,但不要在遍历每个文件的循环中包含plt.show()。 plt.show()应该在循环之外。