【问题标题】:Pandas get data from a list of column namesPandas 从列名列表中获取数据
【发布时间】:2020-12-11 21:35:44
【问题描述】:

我有一个 pandas 数据框:df 和列名列表:columns,就像这样:

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

columns = ['A','B']

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

b
0
b
1
c
2
d
4

这是我尝试过的:

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

但它抛出了这个错误:

TypeError: 无法连接类型为 '' 的对象; 只有 Series 和 DataFrame obj 有效

我该如何解决这个问题?

【问题讨论】:

  • 您能添加一个小的输入/输出示例吗?
  • @DaniMesejo 添加了示例输入/输出

标签: python pandas


【解决方案1】:

我觉得你可以用numpy.ravel:

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

DataFrame.stackSeries.reset_indexdrop=True

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

如果要更改订单,可以使用DataFrame.melt:

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 2013-10-16
      • 2023-02-07
      • 2019-11-06
      • 1970-01-01
      • 2018-06-01
      • 2022-06-29
      相关资源
      最近更新 更多