我有一个Pandas DataFrame,其中包含几百万行。我想根据条件ticker
从行中选择一个值。
我有以下正在运行的代码:
C
问题在于它是极其无效的。我想知道如何进行与all_matches= df.loc[C, "column_name"]
first_match = next(iter(all_matches), 'no match')
类似的操作,但是在第一场比赛就停止了。
答案 0 :(得分:3)
如果始终存在第一个值,请使用Series.iat
快速获取第一个值:
var iso = Encoding.GetEncoding("ISO-8859-1");
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".rtf";
System.IO.File.WriteAllText(fileName, body, iso);
或者:
df.loc[C, "column_name"].iat[0]
另一种解决方案是更改this:
df.loc[C, "column_name"].values[0]
答案 1 :(得分:1)
我进行了测试,发现at
比iat
快。其他的则不合适,因为它们已被弃用或它们是矢量捕获器。
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(100, 100))
%timeit df.iat[50,50]=50 # ✓
%timeit df.at[50,50]=50 # ✔
%timeit df.set_value(50,50,50) # will deprecate
%timeit df.iloc[50,50]=50
%timeit df.loc[50,50]=50
7.06 µs ± 118 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
5.52 µs ± 64.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
3.68 µs ± 80.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
98.7 µs ± 1.07 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
109 µs ± 1.42 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)