我已经在熊猫数据框中加载了两列的csv文件,该文件在每行的column [0](整数索引)中具有唯一键,在每行的column [1]中具有一个值。它没有标题。
我只想通过使用一个键与值column [0]进行匹配来查找column [1]中的单个值(或整个行系列)。
当然是有效的,等等。就好像这是一本字典,其字符串键像value = dict.get(key)
示例csv文件:
int maximumGap(const vector<int> &num) {
if (num.empty() || num.size() < 2) return 0;
int maxNum = *max_element(num.begin(), num.end());
int minNum = *min_element(num.begin(), num.end());
//average gap from minNum to maxNum.
int gap = (maxNum - minNum - 1) / (num.size() - 1) + 1;
//number of buckets = num.size() - 1
vector<int> bucketsMin(num.size() - 1, INT_MAX);
vector<int> bucketsMax(num.size() - 1, INT_MIN);
//put into buckets
for (int i = 0; i < num.size(); i++)
{
if (num[i] != maxNum && num[i] != minNum)
{
int buckInd = (num[i] - minNum) / gap;
bucketsMin[buckInd] = min(bucketsMin[buckInd], num[i]);
bucketsMax[buckInd] = max(bucketsMax[buckInd], num[i]);
}
}
int maxGap = INT_MIN;
int previous = minNum;
for (int i = 0; i < num.size() - 1; i++)
{
if (bucketsMin[i] == INT_MAX && bucketsMax[i] == INT_MIN) continue; //empty
//i_th gap is minvalue in i+1_th bucket minus maxvalue in i_th bucket
maxGap = max(maxGap, bucketsMin[i] - previous);
previous = bucketsMax[i];
}
maxGap = max(maxGap, maxNum - previous);
return maxGap;
}
...
a, "valueForA"
x, "valueForX"
z, "valueForZ"
答案 0 :(得分:2)
我的建议是使用键字段作为索引并将值字段作为序列值,将值存储为简单的熊猫Series
(而不是数据框)。可以通过以这种方式调用read_csv
方法来实现(某些细节来自the OP's answer)。
s = pd.read_csv('/data/companyDataByCusip.csv', encoding='utf_8', names=['cusip','value'], index_col='cusip', squeeze=True)
现在您可以像访问字典一样访问Series
:
val = s[key]
如果确实需要数据框,则可以从squeeze
中删除read_csv
参数,然后使用df.at[key,'value']
访问该值。
答案 1 :(得分:0)
您可以尝试:
df[df.column0==key].column1.iloc[0]
答案 2 :(得分:0)
使用df.at[index, column]
。 See documentation here.
例如:
import pandas as pd
df = pd.DataFrame(data=[{'value': x*x} for x in range(10)],
index=[x for x in range(10)])
print(df)
print('At 4: {}'.format(df.at[4, 'value']))
输出:
value
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
At 4: 16
更新:
要获取数据框作为回报,可以尝试执行以下操作:
row = df[df.index.values == 4]
print(row)
输出:
value
4 16
答案 3 :(得分:0)
简单的loc
可以完成工作:
df.loc[[integer index]]
答案 4 :(得分:0)
好吧,看起来像使用.loc()一样,但是它要求您明确设置一个列作为行索引字段,并设置一个明确的列名。尽管我没有进行速度测试,但它仍然有效。
我找到的文档在这里:
https://www.kdnuggets.com/2019/04/pandas-dataframe-indexing.html
# read in the file of the cusip database to a data frame
df = pandas.read_csv('/data/companyDataByCusip.csv',encoding='utf_8', names=['cusip','value'])
df.set_index('cusip',inplace=True)
rec = df.loc[cusip,:]
print(rec) # series for row