gpt4 book ai didi

python - 从 .csv 文件获取数据

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:45 24 4
gpt4 key购买 nike

我正在开发一个 python 项目,其中有一个像这样的 .csv 文件:

freq,ae,cl,ota
825,1,2,3
835,4,5,6
850,10,11,12
880,22,23,24
910,46,47,48
960,94,95,96
1575,190,191,192
1710,382,383,384
1750,766,767,768

我需要在运行时快速从文件中获取一些数据。
举个例子:

我以 880MHz 的频率进行采样,我想对样本进行一些计算,并利用 .csv 文件第 880 行中的数据。

我通过使用频率冒号作为索引来做到这一点,然后只使用采样频率来获取数据,但棘手的部分是,如果我使用 900MHz 进行采样,我会得到一个错误。我希望它获取下方和上方最近的数据,在本例中为 880 和 910,从这些数据到行,我将使用这些数据对 900MHz 下的数据进行线性化估计。

我的主要问题是如何快速搜索数据,如果不存在完美匹配如何获得最近的两行?

最佳答案

获取之前的行/系列和之后的行

In [11]: before, after = df1.loc[:900].iloc[-1], df1.loc[900:].iloc[0]

In [12]: before
Out[12]:
ae 22
cl 23
ota 24
Name: 880, dtype: int64

In [13]: after
Out[13]:
ae 46
cl 47
ota 48
Name: 910, dtype: int64

在中间放一个空行,interpolate (编辑:默认 interpolation 只是取两者的平均值,所以我们需要设置 method='values'):

In [14]: sandwich = pd.DataFrame([before, pd.Series(name=900), after])

In [15]: sandwich
Out[15]:
ae cl ota
880 22 23 24
900 NaN NaN NaN
910 46 47 48

In [16]: sandwich.apply(apply(lambda col: col.interpolate(method='values'))
Out[16]:
ae cl ota
880 22 23 24
900 38 39 40
910 46 47 48

In [17]: sandwich.apply(apply(lambda col: col.interpolate(method='values')).loc[900]
Out[17]:
ae 38
cl 39
ota 40
Name: 900, dtype: float64

注意:

df1 = pd.read_csv(csv_location).set_index('freq')

你可以用某种函数包装它:

def interpolate_for_me(df, n):
if n in df.index:
return df.loc[n]
before, after = df1.loc[:n].iloc[-1], df1.loc[n:].iloc[0]
sandwich = pd.DataFrame([before, pd.Series(name=n), after])
return sandwich.apply(lambda col: col.interpolate(method='values')).loc[n]

关于python - 从 .csv 文件获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com