我有两个清单:
number = [21, 44]
access = ["denied", "Try Again"]
我将这两个变量合并为一个对象:
testInput = [number, access]
testInput
的输出:
[[21, 44], ['denied', 'Try Again']]
现在我想循环遍历testInput
并提取值并将它们映射到数据框内的键。
以下是我的尝试:
for number, access in testInput:
df = df.append({'Access Message': access, 'Number': number},ignore_index=True)
print df
输出df:
Access Message Number
0 44 21
1 Try Again denied
我面临的问题是,数字(44)的值在不应该返回时作为访问值返回。
当我打印号码'在for循环中我得到了
21
denied
我最终想要df
作为for循环的输出
Access Message Number
0 denied 21
1 Try Again 44
我在for循环中做错了吗?或者我可以在for循环之前做一些不同的事情吗?
答案 0 :(得分:2)
你可以使用
df = pd.DataFrame({'Access Message': access, 'Number': number})
产生期望的结果
Access Message Number
0 denied 21
1 Try Again 44
如果您确实要将现有数据框附加到评论中提到的@Tim,则可以
for ni, aci in zip(number, access):
df = df.append({'Access Message': aci, 'Number': ni}, ignore_index=True)
给出(我只是附加到我上面创建的df
)
Access Message Number
0 denied 21
1 Try Again 44
2 denied 21
3 Try Again 44
但我想对于大型列表更有效的方法是使用concat
(同样@Wen在评论中建议):
append_me = pd.DataFrame(zip(number, access)).rename(columns={0: 'Number', 1: 'Access Message'})
df = pd.concat([df, append_me])
给出(我再次附加到前一个数据帧)
Access Message Number
0 denied 21
1 Try Again 44
2 denied 21
3 Try Again 44
0 denied 21
1 Try Again 44
答案 1 :(得分:0)
您正在使用两个值进行迭代:angular.module('filter.parselinks',[])
.filter('parseLinks', ParseLinks);
function ParseLinks() {
var LINKY_URL_REGEXP =
/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
MAILTO_REGEXP = /^mailto:/i;
var isDefined = angular.isDefined;
var isFunction = angular.isFunction;
var isObject = angular.isObject;
var isString = angular.isString;
return function(text, target, attributes) {
if (text == null || text === '') return text;
if (typeof text !== 'string') return text;
var attributesFn =
isFunction(attributes) ? attributes :
isObject(attributes) ? function getAttributesObject() {return attributes;} :
function getEmptyAttributesObject() {return {};};
var match;
var raw = text;
var html = [];
var url;
var i;
while ((match = raw.match(LINKY_URL_REGEXP))) {
// We can not end in these as they are sometimes found at the end of the sentence
url = match[0];
// if we did not match ftp/http/www/mailto then assume mailto
if (!match[2] && !match[4]) {
url = (match[3] ? 'http://' : 'mailto:') + url;
}
i = match.index;
addText(raw.substr(0, i));
addLink(url, match[0].replace(MAILTO_REGEXP, ''));
raw = raw.substring(i + match[0].length);
}
addText(raw);
return html.join('');
function addText(text) {
if (!text) {
return;
}
html.push(text);
}
function addLink(url, text) {
var key, linkAttributes = attributesFn(url);
html.push('<a ');
for (key in linkAttributes) {
html.push(key + '="' + linkAttributes[key] + '" ');
}
if (isDefined(target) && !('target' in linkAttributes)) {
html.push('target="',
target,
'" ');
}
html.push('href="',
url.replace(/"/g, '"'),
'">');
addText(text);
html.push('</a>');
}
};
}
但是您的testInput没有这样分开。所有数字都在第一项中,所有访问消息都在第二项中。你想要的是一个数字访问列表 _pairs 。 EG
for num, access in...
试
[(21, 'denied'), (44, 'Try Again'), (99, 'someMessage') ...]
这会获取每个列表中的第一项(pairs = zip(testInput[0], testInput[1])
和testInput[0]
)并将它们匹配在一起。因此,第一个数字在第一次访问时被放入元组,第二个数字在第二次访问时被放入...等等。
然后通过for循环运行testInput[1]
pairs
答案 2 :(得分:0)
而不是:
Blocking Mask
尝试:
Ignore Raycast
testInput = [number, access]
方法通过交错两个列表来创建对。所以,它会给出
testInput = zip(number, access)
哪个应该与你想要做的很好地吻合。