程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从csv中选择几行并在python中绘制两列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从csv中选择几行并在python中绘制两列?

开发过程中遇到从csv中选择几行并在python中绘制两列的问题如何解决?下面主要结合日常开发的经验,给出你关于从csv中选择几行并在python中绘制两列的解决方法建议,希望对你解决从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')

从csv中选择几行并在python中绘制两列

,

数据框的结构使您的绘图任务变得困难。

我建议您首先告诉 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,请注明来意。
标签: