Python 熊猫:通过“应用”功能;A栏“;,同时阅读;B栏“;
我正在使用Python 熊猫:通过“应用”功能;A栏“;,同时阅读;B栏“;,python,pandas,Python,Pandas,我正在使用Pandas来驱动Python函数。在inputs.csv中,我使用“列A”中的每一行作为函数的输入 在csv中,还有一个的“B列”,其中包含我想读入函数中变量x的值。不应从“B列”“A列”中应用——这仍然应该从“A列”中执行。这可能吗 这是应用A列功能的当前代码: 编辑后:此问题已被确定为可能重复的问题。虽然答案可能相同,但问题却不一样。对于未来的读者来说,两列上的apply与一列上的apply以及同时“阅读”另一列的互换性可能并不明显。因此,问题应该是开放的。是的,您当前正在使
Pandas
来驱动Python
函数。在inputs.csv
中,我使用“列A”
中的每一行作为函数的输入
在csv
中,还有一个的“B列”
,其中包含我想读入函数中变量x
的值。不应从“B列”
“A列”中应用——这仍然应该从“A列”
中执行。这可能吗
这是应用A列功能的当前代码:
编辑后:此问题已被确定为可能重复的问题。虽然答案可能相同,但问题却不一样。对于未来的读者来说,两列上的apply
与一列上的apply
以及同时“阅读”另一列的互换性可能并不明显。因此,问题应该是开放的。是的,您当前正在使用,而您可以使用-,withaxis=1
获取函数中的每一行,然后您可以作为-行[]
访问列
范例-
In [37]: df
Out[37]:
X Y Count
0 0 1 2
1 0 1 2
2 1 1 2
3 1 0 1
4 1 1 2
5 0 0 1
In [38]: def func1(r):
....: print(r['X'])
....: print(r['Y'])
....: return r
....:
In [39]: df.apply(func1,axis=1)
0
1
0
1
1
1
1
0
1
1
0
0
Out[39]:
X Y Count
0 0 1 2
1 0 1 2
2 1 1 2
3 1 0 1
4 1 1 2
5 0 0 1
这只是一个非常简单的示例,您可以根据实际需要修改它。传递给的axis=1
参数将整行作为一个元组参数放入
但是,这比使用单个列应用要慢得多。如果性能是一个问题,我建议不要这样做
def scrape(x):
a, b = x
# Magically create c, d, e from a
print(b)
return pd.Series([c, d, e])
df[["Column C", "Column D", "Column E"]] = df[(['Column A', 'Column B'])].apply(scrape, axis=1)
我不确定你的问题是否正确,但也许你想要的只是df[(['Column A','Column B'])。apply(scrape,axis=1)
,这意味着你的函数仍然只有一个参数scrape
,但这个参数是列A
和列B
的值的元组。谢谢你的回答。我不需要以任何方式组合列–列A
仍然保留参数的关键字。我只需要读取列B
并将其传递给变量。如果我通过axis=1
运行参数,我如何从元组中为def函数(A)
选择列A
?在def函数(A)内部:
您只需要有这样一行:col_A,col_b=A
更准确地回答。您想在哪里“创建x”?它应该在数据帧中结束,还是仅仅在函数中结束?x应该是一个系列还是一个变量?谢谢你的回复!我不确定我是否理解正确,我可能不清楚-a
和b
不相同,也不应该合并。我想做的是使用a
作为函数的参数,就像在我的原始代码中一样b
只应作为x=b
传递给x
。因此,如果我运行def function(a)
,如何在该函数中包含b
?@Winterflags更新了我的答案谢谢您的帮助!我在您的解决方案中遇到了一个奇怪的JSON错误,不是JSON可序列化的
。我相信它会工作,但我无法解决它。谢谢你的回复,它现在工作了!我唯一的问题是,它会在进入下一行之前读取最上面的行2次。这样就没有重复了。你知道为什么吗(如果它与DataFrame.apply()
vsSeries.apply()
。不,它与Series.apply没有任何关系。apply
vsDataFrame.apply
。你确定DataFrame本身顶部没有两次相同的行吗?检查我的示例,它没有两次读取第一行(只是第一行和第二行是相同的)。若要交叉检查,请尝试打印该行的索引
,以查看它是否实际上是同一行。我检查了索引,结果是正确的。问题一定在于我如何将参数传递给函数。(我没有使用文字示例)。谢谢!
def scrape(x):
a, b = x
# Magically create c, d, e from a
print(b)
return pd.Series([c, d, e])
df[["Column C", "Column D", "Column E"]] = df[(['Column A', 'Column B'])].apply(scrape, axis=1)