【问题标题】:Python 3.7+Numpy+pandas Arrays Selecting data between a rangePython 3.7+Numpy+pandas 数组在范围之间选择数据
【发布时间】:2019-03-04 19:10:09
【问题描述】:

好的,我将尝试解释我的问题,我有一个包含数据的 csv 文件,数据是波长和幅度,图像包含在此处。

CSV data

所以,我只想选择 500nm 到 800nm(波)之间的数据,

import pandas as pd
import numpy as np
excelfile=pd.read_csv('Files/660nm.csv');
excelfile.head();
wave = excelfile['Longitud'];
wave = np.array(wave);
X = excelfile['Amplitud'];
X = np.array(X);
wave = wave[(wave > 500) & (wave < 800)]

这在第一个实例中做了我想要的,但我想将此选择扩展到振幅 (X) 列,以拥有两个相同维度的数组。在我的实际代码中,我必须创建一个索引来选择幅度数组(X)中的数据:

indices = np.arange(382,775,1)
X = np.take(X, indices)

但这不是最佳实践,如果我不能将第一列选择扩展到振幅列,我不必创建另一个数组来索引 X 数组,并检查数组的扩展,任何想法它 ? 谢谢。

【问题讨论】:

  • 我会推荐10 Minutes to pandas,特别是关于这个问题的布尔索引部分的所有内容。将数据读入DataFrame,然后将其拆分为单独的数组,这违背了pandas 的全部目的,因为您只是将它用作美化的csv 阅读器。
  • 请不要发布代码或数据的图像。将其复制并粘贴为文本,然后将其格式化为代码。 Why not upload images of code on SO when asking a question?

标签: python pandas numpy python-3.7


【解决方案1】:

就像@ALollz 指出的那样,您不应该拆分 DataFrame。相反,只需在波长上过滤整个数据帧。请参阅DataFrame.loc 的文档

import pandas as pd
import numpy as np

# some dummy data
excelfile = pd.DataFrame({'Longitud': np.random.random(100) * 1000,
                          'Amplitud': np.arange(100)})

wave = excelfile['Longitud']
excelfile_filtered = excelfile.loc[(wave > 500) & (wave < 800)]
X = excelfile_filtered ['Amplitud'].values  # yields an array

【讨论】:

  • 我得到了这条线的结果excelfile=excelfile[(excelfile['Longitud'] &gt; 500) &amp; (excelfile['Longitud'] &lt; 800)
  • 不客气。如果有帮助,请accept the answer :)
猜你喜欢
  • 2021-05-24
  • 2015-09-15
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
相关资源
最近更新 更多