Python 从系列创建熊猫数据帧而不复制其名称?
是否可以从系列列表中创建数据帧而不复制它们的名称 例如,创建与以下相同的数据帧:Python 从系列创建熊猫数据帧而不复制其名称?,python,pandas,Python,Pandas,是否可以从系列列表中创建数据帧而不复制它们的名称 例如,创建与以下相同的数据帧: >>> pd.DataFrame({ "foo": data["foo"], "bar": other_data["bar"] }) 但是不需要显式命名列?尝试pandas.concat,它将要组合的项目列表作为其参数: df1 = pd.DataFrame(np.random.randn(100, 4), columns=list('abcd')) df2 = pd.DataFrame(np.
>>> pd.DataFrame({ "foo": data["foo"], "bar": other_data["bar"] })
但是不需要显式命名列?尝试
pandas.concat
,它将要组合的项目列表作为其参数:
df1 = pd.DataFrame(np.random.randn(100, 4), columns=list('abcd'))
df2 = pd.DataFrame(np.random.randn(100, 3), columns=list('xyz'))
df3 = pd.concat([df1['a'], df2['y']], axis=1)
请注意,您需要使用
axis=1
将事物并排堆叠在一起,并使用axis=0
(默认设置)将它们逐个组合起来。尝试使用pandas.concat
,它以要组合的项目列表作为参数:
df1 = pd.DataFrame(np.random.randn(100, 4), columns=list('abcd'))
df2 = pd.DataFrame(np.random.randn(100, 3), columns=list('xyz'))
df3 = pd.concat([df1['a'], df2['y']], axis=1)
请注意,您需要使用
axis=1
将事物并排堆叠在一起,并使用axis=0
(这是默认设置)将它们一个一个地组合起来。似乎您想要加入数据帧(工作原理类似于SQL):
kwarg上的获取列列表或None
。如果None
,它将连接两个数据帧的索引。您只需确保使用的数据帧的大小为左-因此双括号将df['foo']]强制为数据帧(df['foo']返回一个序列)
这给了我:
foo bar
A 4 NaN
B 0 NaN
C 10 NaN
D 8 3
E 2 0
F 3 3
H 9 10
I 0 9
J 5 6
K 2 9
L NaN 3
M NaN 1
N NaN 1
您还可以执行内部
、左
、和右
联接。似乎您想要联接数据帧(工作原理类似于SQL):
kwarg上的获取列列表或None
。如果None
,它将连接两个数据帧的索引。您只需确保使用的数据帧的大小为左-因此双括号将df['foo']]强制为数据帧(df['foo']返回一个序列)
这给了我:
foo bar
A 4 NaN
B 0 NaN
C 10 NaN
D 8 3
E 2 0
F 3 3
H 9 10
I 0 9
J 5 6
K 2 9
L NaN 3
M NaN 1
N NaN 1
你也可以做内部
,左
,和右
连接。我更喜欢你原来文章中提出的明确方式,但是如果你真的想写一次特定的名字,你可以尝试以下方法:
import pandas as pd
import numpy as np
def dictify(*args):
return dict((i,n[i]) for i,n in args)
data = { 'foo': np.random.randn(5) }
other_data = { 'bar': np.random.randn(5) }
print pd.DataFrame(dictify(('foo', data), ('bar', other_data)))
产出如预期:
bar foo
0 0.533973 -0.477521
1 0.027354 0.974038
2 -0.725991 0.350420
3 1.921215 0.648210
4 0.547640 1.652310
[5 rows x 2 columns]
我更喜欢直白的方式,正如你在原始帖子中介绍的那样,但是如果你真的想写一次特定的名字,你可以尝试以下方法:
import pandas as pd
import numpy as np
def dictify(*args):
return dict((i,n[i]) for i,n in args)
data = { 'foo': np.random.randn(5) }
other_data = { 'bar': np.random.randn(5) }
print pd.DataFrame(dictify(('foo', data), ('bar', other_data)))
产出如预期:
bar foo
0 0.533973 -0.477521
1 0.027354 0.974038
2 -0.725991 0.350420
3 1.921215 0.648210
4 0.547640 1.652310
[5 rows x 2 columns]
这似乎是一种奇怪的做事方式……如果我们添加另一个函数,为什么不简单地<代码> DeCudie= LAMBDA系列:DICT((S.No.S,S系列))< /代码>?我绝对不认为这是一个好的实践,但它确实回答了你的问题:……你还可以进一步扩展<代码> DIQUTIFY()<代码>的功能,因此,dictify(('foo1','foo2','foo3',data))
这样的调用是可能的。不过,它不一定是隐含的,可能比明确的方式记忆效率低。这似乎是一种奇怪的做事方式……如果我们添加了另一个函数,为什么不简单地写代码“DigStult= LAMBDA系列:DIST((S.NeXS,S)系列))< /代码>?我绝对不认为这是一个好的实践。但它确实回答了您的问题:)…您还可以进一步扩展dictify()
,这样就可以调用dictify(('foo1','foo2','foo3',data))
。尽管如此,这种方式还是不必要的隐式,而且可能比显式方式记忆效率更低。下面是一些很好的答案。需要注意的一点是:如果数据
和其他数据
的索引不相同,您首选的解决方案可能取决于您想要做什么。您希望新数据帧的索引是并集、交集还是构建块索引的其他组合concat
应该可以让你加入工会。join
和merge
的各种选项让您可以探索其他一些可能性。下面是一些不错的答案。需要注意的一点是:如果数据
和其他数据
的索引不相同,您首选的解决方案可能取决于您想要做什么。您希望新数据帧的索引是并集、交集还是构建块索引的其他组合concat
应该可以让你加入工会。join
和merge
的各种选项让您可以探索其他一些可能性。