在同一行的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 loop
与 min_val = data.TX.idxmax() # 10000 loops, best of 3: 48.7 µs per loop
【参考方案2】:
使用loc
是“标准”,应该是高度可读的。但是在这里使用idxmax
和at
是您最快的答案(请参阅温的答案以了解我的想法)。您可能希望使用您的真实数据进行测试,以确保这少量数据不会提供红鲱鱼。见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文件中获取值的主要内容,如果未能解决你的问题,请参考以下文章