在Pandas中,从DataFrame中获取Series的列表

12

有没有一种方法可以从DataFrame中提取Series列表?

例如,下面的方法可以得到我想要的结果,但是我感觉应该有一种更简单的方法:

In [136]: df=pd.DataFrame(pd.np.random.rand(10,3), columns=list('abc'))
Out[136]: 
          a         b         c
0  0.729100  0.102947  0.589687
1  0.180960  0.514507  0.359253
2  0.003143  0.353437  0.377803
3  0.565025  0.983447  0.380672
4  0.289800  0.256467  0.559850
5  0.177332  0.049220  0.467654
6  0.863002  0.325522  0.308502
7  0.926534  0.327017  0.159471
8  0.688663  0.934143  0.762619
9  0.203271  0.862646  0.317251

In [138]: [item[1] for item in df.items()]
Out[138]: 
[0    0.052074
 1    0.650355
 2    0.011106
 3    0.499441
 4    0.874509
 5    0.429968
 6    0.869368
 7    0.719732
 8    0.441703
 9    0.653455
 Name: a, dtype: float64, 0    0.431164
 1    0.736769
 2    0.235221
 3    0.452332
 4    0.578849
 5    0.116561
 6    0.679606
 7    0.549857
 8    0.761222
 9    0.468103
 Name: b, dtype: float64, 0    0.850285
 1    0.298383
 2    0.511760
 3    0.485509
 4    0.587351
 5    0.332112
 6    0.230234
 7    0.520007
 8    0.127432
 9    0.692219
 Name: c, dtype: float64]

df.values() 是与 df.items() 匹配的方法,但是 .values 可以获取 NumPy 值。


list(df.iteritems())怎么样? - hilberts_drinking_problem
2
你为什么需要这个呢?你可以获取列名列表,然后使用它们作为索引来访问数据框中的列值,这样也能返回系列。 - EdChum
如果你想获取第n列而不是标签名称,你可以使用df[df.columns[n]] - benjwadams
2个回答

10
这将返回一个系列列表。
import pandas as pd

df = pd.DataFrame(pd.np.random.rand(10,3), columns=list('abc'))
# get a list of Series from the column names
series_list = [df[col] for col in df]
print(series_list)

打印

[0    0.743692
1    0.364492
2    0.133023
3    0.861350
4    0.108383
5    0.058208
6    0.932846
7    0.462293
8    0.305808
9    0.045466
Name: a, dtype: float64, 0    0.783904
1    0.479855
2    0.407343
3    0.764235
4    0.422370
5    0.076351
6    0.237434
7    0.251543
8    0.600384
9    0.458412
Name: b, dtype: float64, 0    0.918281
1    0.995960
2    0.329548
3    0.036124
4    0.791106
5    0.420298
6    0.068579
7    0.611581
8    0.173925
9    0.652559
Name: c, dtype: float64]

1
很好。虽然不是单一的方法,但比我的好。[df[col] for col in df] 更加简洁。 - Maximilian

6

另外一种方法:

columns, columnSeries = zip(*df.iteritems())

获取每行作为Series:

indices, rowSeries = zip(*df.iterrows())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接