为了账号安全,请及时绑定邮箱和手机立即绑定

通过索引符号而不是列名称选择数据框中的列

通过索引符号而不是列名称选择数据框中的列

慕村9548890 2023-09-19 14:37:16
我想使用条目“开始”df_D从给定的输入创建一个df作为行索引和列索引的参考。我不想使用列名A,B, C等。相反,我希望使用索引,因为序列始终是“START”的前 3 列和最后 3 列,即类似n,n+1,n+2, n+5,n+6,n+7输入:df = pd.DataFrame({'A':['jfgh',23,'Ndfg',34,0,56],'B':['jfgh',23,'START',34,0,56], 'C':['cvb',7,'dsfgA',65,47,3],'D':['rrb',7,'gfd',3,0,7],'E':['dfg',7,'gfd',5,12,1],'F':['dfg',7,'sdfA',5,0,4],'G':['dfg',7,'sdA',5,8,9],'H':['dfg',7,'gfA',5,0,8],'I':['dfg',7,'sdfA',5,7,23]})输出:      A      B      C    D    E     F    G    H     I0  jfgh   jfgh    cvb  rrb  dfg   dfg  dfg  dfg   dfg1    23     23      7    7    7     7    7    7     72  Ndfg  START  dsfgA  gfd  gfd  sdfA  sdA  gfA  sdfA3    34     34     65    3    5     5    5    5     54     0      0     47    0   12     0    8    0     75    56     56      3    7    1     4    9    8    23所需输出: df_D 手动创建    B   C  D  G  H   I0   0  47  0  8  0   71  56   3  7  9  8  23尝试1:for index in range(len(df)):    if str(df.loc[index,'C']).startswith('START'):        df_D = df.iloc[index+1:len(df), [1,2,3,6,7,8]]        break 结果输出:Empty DataFrameColumns: [B, C, D, G, H, I]Index: []我哪里出错了?
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

我们可以使用它np.where来查找起始索引。然后使用ilocwithnp._r来创建我们的切片:


start_col = np.where(df.eq("START"))[1][0]

cols = df.shape[1]

col_select = np.r_[start_col: start_col+3, cols-3: cols]


df.iloc[-2:, col_select]

    B   C  D  G  H   I

4   0  47  0  8  0   7

5  56   3  7  9  8  23


查看完整回答
反对 回复 2023-09-19
?
开满天机

TA贡献1786条经验 获得超12个赞

步骤0:初始化一个空列表k

第 1 步:使用 df.shape[1] "START" 上的 for 循环遍历所有列

步骤 2:迭代每列中的所有行我使用 df 执行此操作。形状[0]

第三步:搜索“开始”

第 4 步:找到后存储列号。和变量中的行号。

第 5 步:使用这些变量来索引所需的所有行和列。所以你使用 row+1 因为你想要 START 下面的所有内容和 col ,col+ 1 等等。

步骤 6:将数据帧添加到列表 k

最后一步:您可以看到 k[0] 给出了 start 的第一个实例,k[1] 给出了 start 的第二个实例,您可以将其用作更通用的代码。如果您不希望所有实例在找到第一个数据帧后立即使用中断。

k=[]

for i in range(df.shape[0]):

    for y in range(df.shape[0]):

        if df.iloc[y,i] == 'START':

            col = i

            row = y

            k.append(df.iloc[row+1:,[col,col+1,col+2,-3,-2,-1]])    

print("first START")

print(k[0])

print("\n Second START")

print(k[1])


查看完整回答
反对 回复 2023-09-19
  • 2 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信