这是一个数据框:
A B C
0 6 2 -5
1 2 5 2
2 10 3 1
3 -5 2 8
4 3 6 2
我可以获取列基本上是从原来的列的元组df使用df.apply:
out = df.apply(tuple, 1)
print(out)
0 (6, 2, -5)
1 (2, 5, 2)
2 (10, 3, 1)
3 (-5, 2, 8)
4 (3, 6, 2)
dtype: object
但是,如果我想要一个值列表而不是它们的元组,那我就做不到,因为它不能满足我的期望:
out = df.apply(list, 1)
print(out)
A B C
0 6 2 -5
1 2 5 2
2 10 3 1
3 -5 2 8
4 3 6 2
相反,我需要这样做:
out = pd.Series(df.values.tolist())
print(out)
0 [6, 2, -5]
1 [2, 5, 2]
2 [10, 3, 1]
3 [-5, 2, 8]
4 [3, 6, 2]
dtype: object
为什么我不能使用df.apply(list, 1)我想要的东西?
附录
一些可能的解决方法的时间安排:
df_test = pd.concat([df] * 10000, 0)
%timeit pd.Series(df.values.tolist()) # original workaround
10000 loops, best of 3: 161 µs per loop
%timeit df.apply(tuple, 1).apply(list, 1) # proposed by Alexander
1000 loops, best of 3: 615 µs per loop
罪魁祸首在这里。有了func=tuple
它就可以了,但是usingfunc=list
在编译模块中引发了一个异常lib.reduce
:
ValueError: ('function does not reduce', 0)
如您所见,它们捕获了异常,但不费心去处理它。
即使没有太宽泛的except子句,这也是pandas中的一个错误。您可能会尝试在他们的跟踪器上提高它,但是类似的问题已因某种无法修复或欺骗而被关闭。
16321:使用apply()基于当前列创建列表的奇怪行为
15628:当reduce = True
时,Dataframe.apply
并不总是返回Series
后者的问题已关闭,然后重新打开,并在几个月前转换为docs增强请求,现在似乎已被用作任何相关问题的垃圾场。
大概这不是一个高优先级,因为正如piRSquared所评论(和其中一位熊猫维护者也评论过)一样,您最好使用列表理解功能:
pd.Series([list(x) for x in df.itertuples(index=False)])
通常apply将使用numpy ufunc或类似的东西。
问题内容: 这是一个数据框: 我可以获取列基本上是从原来的列的元组使用: 但是,如果我想要一个值列表而不是它们的元组,那我就做不到,因为它不能满足我的期望: 相反,我需要这样做: 为什么我不能使用我想要的东西? 附录 一些可能的解决方法的时间安排: 问题答案: 罪魁祸首在这里。有了它就可以了,但是using在编译模块中引发了一个异常: 如您所见,它们捕获了异常,但不必费心去处理它。 即使没有太宽泛
问题内容: 我正在为Python学习win32com,但遇到了一个奇怪的问题。 我正在尝试在词典列表中导出Outlook联系人。我的代码与win32com.client.Dispatch(“ Outlook.Application)完美配合。但是它与win32com.client.gencache.EnsureDispatch(” Outlook.Application)返回0个联系人,该联系人应
问题内容: 我正在尝试从JSON网址获取集合。骨干网确实发送了请求并得到了响应,但是在它之后的集合中没有: 这是我的JavaScript: 响应中的JSON 响应中的Content-Type HTTP标头为。 为什么不将其加载到集合中?JSON是否正确? 一些更多的代码: 问题答案: 是异步的。尝试 要么 要么
问题内容: 我有三部分字符串,每个部分用 符号分隔 。例如, 现在,当我使用这样的方法拆分它时: 它包含整个字符串作为单个元素的数组。 但是当我使用这个: 它完美的作品是什么,我想这意味着 现在的数组包含,并分别对指数0,1和2。 我想知道为什么第一次使用时不起作用,因为我在使用 问题答案: 因为字符是在正则表达式中用来标记行尾的保留令牌。因此,您必须使用进行 转义。
问题内容: 我现在有点困惑。我尝试过: 并得到: 但是,我想要: 我的代码有什么问题? 问题答案: 您没有将其分配给。字符串是 不可变的 。 您需要将其分配回。
问题内容: 我正在尝试这样做: 第一行有效: 但是接下来的两个: 和 只是输出 为什么? 问题答案: 因为你需要加入同,只是列出了内容直接,内容不具有完整路径。 范例- 如果未提供完整路径,则在当前目录中搜索,因此当您给出时,将获得正确的列表。 范例- 假设某个文件夹-具有文件-并在其中。 当您执行-时,返回的列表类似于- 即使您在其中提供绝对路径,列表中返回的文件也将具有指向目录的相对路径。您将