大佬教程收集整理的这篇文章主要介绍了从csv中选择几行并在python中绘制两列,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含 5 列和 36 行的 CSV。第一列有一个名称,第二列和第三列在 X(波长)和 Y(反射)轴上有两个我想要的大小。我希望能够选择不同的行并绘制它们的波长与反射率,但我不知道如何为任何给定的行选择两列。 csv 格式如下:
name,_xx,_yy,source,Spectometer
Seawater_open_ocean,"[205,213,...]","[0.0360,0.0360,UGSG,BECK
我只写了这个:
import pandas as pd
import matplotlib.pyplot as plt
import csv
x=[]
y=[]
df = pd.read_csv('albedos.csv')
df.set_index('name',inplace=TruE)
for row in df:
x.append((row[2]))
y.append((row[3]))
print(df.loc[['Dry_sand','Wet_sand','old_road']])
plt.plot(x,y,marker='o')
plt.title('Spectrum')
plt.xlabel('Wavelength')
plt.ylabel('Reflectance')
plt.show()
我不知道如何让它为每个索引元素选择 _xx 和 _yy 列并绘制它。我对编程很陌生,所以也许这很容易,但还没有在这里找到解决这个特定问题的方法。我希望它看起来与此类似:
1
apply(json.loads)
将编码为字符串的列表转换为实际列表set_index()
在.loc[]
中使用它来标识您的坐标import matplotlib.pyplot as plt
import pandas as pd
import io,json
df = pd.read_csv(io.StringIO("""Name,_xx,_yy,source,Spectometer
Dry_sand,"[190,193]","[0.0360,0.0370]",UGSG,BECK
Seawater_open_ocean,"[205,213]",0.0360]",BECK"""),sep=",")
df["_xx"] = df["_xx"].apply(json.loads)
df["_yy"] = df["_yy"].apply(json.loads)
df.set_index("Name",inplace=TruE)
fig,ax = plt.subplots(figsize=[4,4])
# plot two lines... array specifies keys
for l in ["Seawater_open_ocean","Dry_sand"]:
ax.plot(df.loc[l,"_xx"],df.loc[l,"_yy"])
ax.set_title('Spectrum')
ax.set_xlabel('Wavelength')
ax.set_ylabel('Reflectance')
数据框的结构使您的绘图任务变得困难。
我建议您首先告诉 read_csv
它应该将 _xx
和 _yy
中的字符串评估为原生列表:
df = pd.read_csv('albedos.csv',converters={'_xx': eval,'_yy':eval})
假设此数据框中只有一行:
Name _xx _yy source Spectometer
0 Seawater_open_ocean [205,213] [0.036,0.036] UGSG BECK
您可以像这样展开 _xx
和 _yy
:
exploded_df = df[['Name','_xx','_yy']].set_index(['Name']).apply(pd.Series.explodE).reset_index()
并得到
Name _xx _yy
0 Seawater_open_ocean 205 0.036
1 Seawater_open_ocean 213 0.036
我假设从那里开始通过过滤每个名称来绘制数据不会有任何困难。
以上是大佬教程为你收集整理的从csv中选择几行并在python中绘制两列全部内容,希望文章能够帮你解决从csv中选择几行并在python中绘制两列所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。