spark - python dataframe合并




在熊猫数据框中选择列 (6)

我有不同列中的数据,但我不知道如何提取它以将其保存在另一个变量中。

index  a   b   c
1      2   3   4
2      3   4   5

如何选择'b''c'并将其保存到df1中?

我试过了

df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']

没有任何工作。


从版本0.11.0开始, 可以按照您使用.loc索引器尝试的方式对列进行切片:

df.loc[:, 'C':'E']

返回列CE

随机生成的DataFrame演示:

import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)), 
                  columns=list('ABCDEF'), 
                  index=['R{}'.format(i) for i in range(100)])
df.head()

Out: 
     A   B   C   D   E   F
R0  99  78  61  16  73   8
R1  62  27  30  80   7  76
R2  15  53  80  27  44  77
R3  75  65  47  30  84  86
R4  18   9  41  62   1  82

要获取从C到E的列(请注意,与整数切片不同,'E'包含在列中):

df.loc[:, 'C':'E']

Out: 
      C   D   E
R0   61  16  73
R1   30  80   7
R2   80  27  44
R3   47  30  84
R4   41  62   1
R5    5  58   0
...

根据标签选择行也是一样。 从这些列中获取行'R6'到'R10':

df.loc['R6':'R10', 'C':'E']

Out: 
      C   D   E
R6   51  27  31
R7   83  19  18
R8   11  67  65
R9   78  27  29
R10   7  16  94

.loc也接受一个布尔数组,因此您可以选择其数组中相应条目为True 。 例如, df.columns.isin(list('BCD'))返回array([False, True, True, True, False, False], dtype=bool) - 如果列名在列表中,则为true ['B', 'C', 'D'] ; 否则,为假。

df.loc[:, df.columns.isin(list('BCD'))]

Out: 
      B   C   D
R0   78  61  16
R1   27  30  80
R2   53  80  27
R3   65  47  30
R4    9  41  62
R5   78   5  58
...

假设你的列名( df.columns )是['index','a','b','c'] ,那么你想要的数据在第3和第4列。 如果你的脚本运行时你不知道他们的名字,你可以这样做

newdf = df[df.columns[2:4]] # Remember, Python is 0-offset! The "3rd" entry is at slot 2.

正如EMS在他的回答中指出的那样, df.ix切片列更简洁一点,但.columns切片界面可能更自然,因为它使用了香草一维python列表索引/切片语法。

警告: 'index'DataFrame列的错误名称。 同样的标签也用于真正的df.index属性,一个Index数组。 所以你的列由df['index']返回,真正的DataFrame索引由df.index返回。 Index是一种特殊的Series可以查找其元素的值进行优化。 对于df.index,它用于通过标签查找行。 该df.columns属性也是一个pd.Index数组,用于通过标签查找列。


只需使用:它会选择b和c列。

df1=pd.DataFrame()
df1=df[['b','c']]

那么你可以调用df1:

df1

如果你想按行索引和列名得到一个元素,你可以像df['b'][0] 。 它就像你可以形象一样简单。

或者你可以使用df.ix[0,'b'] ,索引和标签的混合使用。


我发现这个方法非常有用:

# iloc[row slicing, column slicing]
surveys_df.iloc [0:3, 1:4]

更多细节可以在here找到


我意识到这个问题是相当古老的,但在熊猫的最新版本中有一个简单的方法来做到这一点。 列名称(即字符串) 可以用任何你喜欢的方式切片。

columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)




dataframe