Pandas从列名列表中获取数据

2024-05-29 05:11:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框:df和列名列表:columns,如下所示:

df = pd.DataFrame({
    'A': ['b','b','c','d'],
    'C': ['b1','b2','c1','d2'],
    'B': list(range(4))})

columns = ['A','B']

现在,我想在一个系列中从dataframe的这些列中获取所有数据,如下所示:

b
0
b
1
c
2
d
4

这就是我所尝试的:

srs = pd.Series()
srs.append(df[column].values for column in columns)

但它抛出了这个错误:

TypeError: cannot concatenate object of type '<class 'generator'>'; only Series and DataFrame objs are valid

如何解决此问题


Tags: columns数据dataframedf列表rangecolumnb2
2条回答

我想你可以用^{}

srs = pd.Series(np.ravel(df[columns]))
print (srs)
0    b
1    0
2    b
3    1
4    c
5    2
6    d
7    3
dtype: object

或者^{}^{}drop=True一起:

srs = df[columns].stack().reset_index(drop=True)

如果可以更改顺序,请使用^{}

srs = df[columns].melt()['value']
print (srs)
0    b
1    b
2    c
3    d
4    0
5    1
6    2
7    3
Name: value, dtype: object

你可以做:

from itertools import chain

import pandas as pd
df = pd.DataFrame({
    'A': ['b','b','c','d'],
    'C': ['b1','b2','c1','d2'],
    'B': list(range(4))})

columns = ['A','B']

res = pd.Series(chain.from_iterable(df[columns].to_numpy()))
print(res)

输出

0    b
1    0
2    b
3    1
4    c
5    2
6    d
7    3
dtype: object

相关问题 更多 >

    热门问题