在同一行的csv文件中获取值

Posted

技术标签:

【中文标题】在同一行的csv文件中获取值【英文标题】:Get value in csv file in same row 【发布时间】:2018-05-29 21:49:13 【问题描述】:

因此,给定一个 csv 文件作为使用 pandas 和 python 的数据框,我想尽可能高效地获取与另一个值在同一行中的值

为了澄清这一点,我将用以下 csv 给你一个例子:

STAID   SOUID   DATE      TX     Q_TX
162     100522  19010101 -31     0
162     100522  19010102 -13     0
162     100522  19010103 -5      0
162     100522  19010104 -10     0
162     100522  19010105 -18     0

让我们说我正在实现以下代码

import pandas as pd

data = pd.read_csv("foo.csv")

max_val = data["TX"].max()

Max_val 现在将获得 -5 的值。问题是我现在想知道“DATE”中的值,它将与 max_val 在同一行中,或者换句话说:“DATE”列中的值与找到的值共享相同的索引。我的目标值是 19010103。仅使用 pandas 的最有效方法是什么?

更新:与 min_val 有点不同,它显然应该是 max_val 而不是 min_val。

【问题讨论】:

【参考方案1】:

我们可以使用idxmax

df.DATE[df.TX.idxmax()]
Out[346]: 19010103

为了提高速度

df.values[2,df.TX.values.argmax()]

【讨论】:

10000 loops, best of 3: 77.6 µs per loop 哇!!这很快。可能微不足道,但 data['DATE'][data['TX'].idxmax()] 返回 10000 loops, best of 3: 60.2 µs per loop 我真的很喜欢你的回答。我在测试中使用at 将其合并,以获得最快的结果。 @MattR aha,使用at 应该很快:-) @MattR 您可以比 idxmax 更快地检查 numpy 方法。 这很有趣...... numpy (略微)较慢。你有不同的想法吗?min_val = np.argmax(data['TX']) # 10000 loops, best of 3: 51 µs per loopmin_val = data.TX.idxmax() # 10000 loops, best of 3: 48.7 µs per loop【参考方案2】:

使用loc 是“标准”,应该是高度可读的。但是在这里使用idxmaxat 是您最快的答案(请参阅温的答案以了解我的想法)。您可能希望使用您的真实数据进行测试,以确保这少量数据不会提供红鲱鱼。见at

基于标签的快速标量访问器 与 loc 类似,at 提供基于标签的标量查找。您也可以使用这些索引器进行设置。

我的测试中最快的答案:

min_val = data.TX.idxmax() #with min_val's index already set
%%timeit
data.at[min_val,'DATE']
# 100000 loops, best of 3: 6.73 µs per loop

在jupyter上使用%%timeit可以看到时间:

%%timeit
data.loc[data['TX'] == min_val]['DATE']
# 1000 loops, best of 3: 604 µs per loop

%%timeit
data[data['TX']==min_val)].DATE #using from comments, and not using loc
# 1000 loops, best of 3: 724 µs per loop

%%timeit
data[data['TX']==data['TX'].max()]['DATE']
#1000 loops, best of 3: 575 µs per loop 

%%timeit
data.at[data.TX.idxmax(),'DATE'] #using at and idxmax <----
# 10000 loops, best of 3: 69.5 µs per loop

%%timeit
data.at[data.loc[data['TX'] == min_val].index[0],'DATE']
# 1000 loops, best of 3: 560 µs per loop

【讨论】:

非常感谢!尽管 idxmax 解决方案更简单,但我更喜欢您的解决方案,因为它更通用 这似乎与 microsoft excel 的 VLOOKUP 函数非常相似。这个 python 功能如何处理匹配查找条件的多行?例如,如果 3 行每行包含 -5

以上是关于在同一行的csv文件中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 .csv 文件中一行的最后一个值

如何从 CSV 文件中获取每一行的第一列?

如何将列表列表写入 CSV 文件 Python?

匹配 csv 文件中的文本,用于 X 首行和最后 X 个结果,并在 lua 中获取值

如何在数据工厂中获取 CSV 的第一行和第一列值?

在 Scala 中,如何读取第一行有标题的简单 CSV 文件?