在python中将多个函数的输出组合到一个pd.Series中(如R中的c())
我一直在使用在python中将多个函数的输出组合到一个pd.Series中(如R中的c()),python,pandas,numpy,Python,Pandas,Numpy,我一直在使用R进行数据分析,并试图学习python。在R中,我可以使用c()创建向量,这将返回一个由我传递的任何内容生成的“列”。我经常使用它来连接序列或重复值。大概是这样的: > test <- c(rep(1:2, each = 2), seq(5, 10, by = 2), runif(3)) > test [1] 1.0000000 1.0000000 2.0000000 2.0000000 5.0000000 7.0000000 9.0000000 [8] 0.9
R
进行数据分析,并试图学习python
。在R中,我可以使用c()
创建向量,这将返回一个由我传递的任何内容生成的“列”。我经常使用它来连接序列或重复值。大概是这样的:
> test <- c(rep(1:2, each = 2), seq(5, 10, by = 2), runif(3))
> test
[1] 1.0000000 1.0000000 2.0000000 2.0000000 5.0000000 7.0000000 9.0000000
[8] 0.9237168 0.5051230 0.2367923
这给我带来了一种嵌套的东西:
0 [1, 1, 2, 2]
1 [5, 7, 9]
2 [0.989736164378, 0.558979301843, 0.385354683044]
dtype: object
我知道我可以,但那似乎太过分了。我神奇地用谷歌搜索到其中包含了我从未听说过的可能有用的tolist()
函数。虽然这是关于将一行数据帧(?)放入一个pd.Series
,但函数似乎可以做到这一点
结合我可以使用+
添加列表(从第一个链接问题中收集),以及上一个链接问题的tolist()
位,我发现:
test1 = np.repeat([1, 2], 2).tolist()
test2 = np.arange(5, 10, 2).tolist()
test3 = np.random.random_sample(3).tolist()
test = pd.Series(test1 + test2 + test3)
0 1.000000
1 1.000000
2 2.000000
3 2.000000
4 5.000000
5 7.000000
6 9.000000
7 0.472650
8 0.077398
9 0.672734
dtype: float64
希望我想做的是清楚的。我喜欢使用c()
,您可以传入任何您想要的内容,并且可以以所需的模式优雅地将一系列生成的数字串在一起。我很惊讶用一个pd.Series
来做这件事有多么困难,并由此推断我做错了
通常如何使用
python
?如果从numpy数组开始,可以使用:
如果从
pandas.Series
对象开始,可以从一个系列到另一个系列:
s1 = pd.Series(np.repeat([1, 2], 2))
s2 = pd.Series(np.arange(5, 10, 2))
s3 = pd.Series(np.random.random_sample(3))
s1.append([s2, s3], ignore_index=True)
#0 1.000000
#1 1.000000
#2 2.000000
#3 2.000000
#4 5.000000
#5 7.000000
#6 9.000000
#7 0.766968
#8 0.730897
#9 0.196995
#dtype: float64
或使用pd.concat
方法:
pd.concat([s1, s2, s3], ignore_index=True)
谢谢你。没有我希望的那么短,但这很有帮助。你的意思是让pd.np.concatenate(…)?我想知道你的意思是不是
pd.Series(np.concatenate(…)
?当然这比不上c()
:)。如果您想要一个Series对象作为结果,那么您需要将pd.Series
包装为pd.Series(np.concatenate(…)
pd.np.concatenate
也是一种有效的语法,如果已经导入了pandas
,可以避免再次导入numpy
。很高兴知道。我可能真的不知道我是否需要一个系列,因为我太新了。我把它作为一个新列反馈到一个pd.DataFrame
,所以我假设是这样。不管是哪种情况,这都是非常好的解决方法!
s1 = pd.Series(np.repeat([1, 2], 2))
s2 = pd.Series(np.arange(5, 10, 2))
s3 = pd.Series(np.random.random_sample(3))
s1.append([s2, s3], ignore_index=True)
#0 1.000000
#1 1.000000
#2 2.000000
#3 2.000000
#4 5.000000
#5 7.000000
#6 9.000000
#7 0.766968
#8 0.730897
#9 0.196995
#dtype: float64
pd.concat([s1, s2, s3], ignore_index=True)