我有一个dataframe('frame'),它有多个列。在第2列('col2')中,我希望它搜索一组字符('42')(包括空格),然后在第1列('col1')中搜索'ID'。然后,在第6列和第7列(“col6”,“col7”)中有一些值,我想将这些值赋给一个列表(我们称之为“vals42”),但只有从找到“42”的索引到找到“ID”的索引的值。然后我想重新开始,寻找下一个'42'等等。你知道吗
另一个棘手的部分是,第一个'ID'实际上在第一个'42'之前,所以我需要它从第二个'ID'开始,这样我就不会有一个无效的范围。你知道吗
另一件事,我的数据帧中有一堆NaN。你知道吗
我试图通过获取'42'的索引和'ID'的索引,然后创建pandas数据帧的一个子集,然后当它转到下一个'42'时,它会创建另一个子集,依此类推。你知道吗
在我以前的一些代码中,我已经知道如何将“col6”和“col7”中的值放入一个列表中。我正在努力(我想)的是得到逻辑来检查这些字符并得到它们的索引。你知道吗
for var in frame:
if (frame['col2'].str.contains(' 42 ')) == True:
begin = frame.index.get_loc(frame.name)
elif (frame['col1'].str.contains('ID')) == True:
end = frame.index.get_loc(frame.name)
subset = frame[begin:end]
for column in subset[['col6','col7']]:
ColumnContents = pd.concat([subset['col6'], subset['col7']])
ColumnContents = pd.to_numeric(ColumnContents, errors = 'coerce')
vals42 = ColumnContents[ColumnContents.apply(lambda x: x > 0 and x < 20)]
熊猫数据框是通过从我拥有的文件夹中读取csv Excel文件来制作的。下面是数据帧的一般格式的一个例子:x表示不重要的数据。你知道吗
col1 col2 . . . col6 col7
0 ID xxx NaN NaN
1 xxx 67812 LT 42 01
2 xxx xxx NaN NaN
3 xxx xxx NaN NaN
4 xxx xxx NaN NaN
.
.
.
17 xxx xxx 0.543 1670
18 xxx xxx 0.321 8954
.
.
.
29 ID xxx NaN NaN
30 xxx 12976 42 01
所以在这个例子中,我要赋值的值从索引17开始,一直到索引28。不过,在索引29中,我们得到了一个新的“ID”,所以它重新开始。列6和列7中存在值的行数不一定总是相同的。另外,数字并不总是'42',它可能是其他的东西,但一旦我得到一个数字,我可以把它应用到其他人,所以我用'42'作为一个例子。理想情况下,如果满足条件(x>;0,x<;20),我希望将“col6”和“col7”中的数字指定给列表。你知道吗
编辑:“ID”字面上就是“ID”。每个实例中都没有与之关联的特殊字符串,因此第0行和第29行中的“ID”完全相同。x'd out数据与'ID'或'67812 LT 42 01'不同。x'd out数据是它自己独特的东西。每个x'd out单元格都有自己独特的字符集,因此它与“ID”或“67812 LT 42 01”不匹配。你知道吗
所以问题是,我知道下面四行代码在我的另一个场景中工作,我只是从整个数据帧中获取值。你知道吗
当我运行这个时,我得到了一个错误“序列的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()
编辑/解决方案:
如果有人对未来的参考很好奇的话,我已经想好了:
start = True
vals42 = pd.Series()
for index2, rows in frame[1:].iterrows():
if (' 42 ' in rows['col2']):
begin = index2
start = True
elif (start == True) & ('ID' in rows['col1']):
end = index2
subset = frame[begin:end]
for column in subset[['col6','col7']]:
ColumnContents = pd.concat([subset['col6'], subset['col7']])
ColumnContents = pd.to_numeric(ColumnContents, errors = 'coerce')
subsetTotal = ColumnContents[ColumnContents.apply(lambda x: x > 0 and x < 20)]
vals42 = pd.concat([vals42, subsetTotal])
start = False
目前没有回答
相关问题 更多 >
编程相关推荐