我需要一次增加一行python DataFrame。
在R中,sapply()
功能很快& efficent。如,
sapply(1:100, function(i) rnorm(50) )
生成一个50 x 100矩阵的(标准正态随机)数字,然后可根据需要进行转置和/或转换为数据框
如何在python中有效地做同样的事情?
答案 0 :(得分:2)
考虑以下列表理解版本:
import numpy as np
import pandas as pd
df = pd.DataFrame([np.random.randn(50) for i in range(100)])
答案 1 :(得分:1)
sapply
等同于python中的map
。
sapply(c(-1, 1), abs)
与Python中的map(abs, (-1, 1))
等效。但是map
返回一个映射对象,因此,如果需要列表,则需要将其传递给list()
。在Python中,您也可以使用列表推导[abs(i) for i in (-1, 1)]
。
您的示例不是sapply
的好用例。无需使用矩阵即可实现:matrix(rnorm(5000), 50, 100)
。同样,在Python中,使用import numpy as np
可以使用np.random.normal(size=(50, 100))
来实现。
答案 2 :(得分:0)
虽然列表理解是sapply()
的更通用替代方法,但是对于所述问题,最有效的方法是省略列表理解:
import numpy as np
import pandas as pd
# randn takes dimensions for args: randn(d1, d2, ..., dn)
df = pd.DataFrame(np.random.randn(50,100))
答案 3 :(得分:-1)
Python可以通过列表理解轻松完成这样的事情:
import random as rand
[[rand.gauss(mu=0, sigma=1) for column in range(50)] for row in range(100)]
否则,您可以使用NumPy
包进行高级矩阵操作。
- 安德烈