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
的各种选项让您可以探索其他一些可能性。