Python 从大熊猫的给定细胞值中获取行

Python 从大熊猫的给定细胞值中获取行,python,pandas,dataframe,Python,Pandas,Dataframe,l具有如下数据帧: print(df.head(15)) 0 5 6 7 8 9 0 NaN char left right top bottom 1 0 m 38 104 2456 2492 2 1 i 40 102 2442 2448 3 2 i 40 100 2402 2410 4 3 l 40

l具有如下数据帧:

print(df.head(15))

     0     5     6      7     8       9
0  NaN  char  left  right   top  bottom
1    0     m    38    104  2456    2492
2    1     i    40    102  2442    2448
3    2     i    40    100  2402    2410
4    3     l    40    102  2372    2382
5    4     m    40    102  2312    2358
6    5     u    40    102  2292    2310
7    6     i    40    104  2210    2260
8    7     l    40    104  2180    2208
9    8     i    40    104  2140    2166
10   9     l    40    104  2124    2134
11  10     .   203    213   191     198
12  11     3   235    262   131     198
13  12     A   275    347   147     239
14  13     M   363    465   145     239
我想检索给定单元格值的行。 例如,如果我给出
m
l得到以下结果:

1    0     m    38    104  2456    2492
5    4     m    40    102  2312    2358
如果我给出
left=40
right=102

我明白了


我认为您需要第一个干净的dataframe—从第一行创建列,然后删除此行:

#columns from first row 
df.columns = df.iloc[0]
#remove 0 from column names
df.columns.name = None
#reove first row and first column, create default index (0,1,2,...)
df = df.iloc[1:, 1:].reset_index(drop=True)
cols = ['left','right','top','bottom']
#convert string columns to int
df[cols] = df[cols].astype(int)
print (df)
   char  left  right   top  bottom
0     m    38    104  2456    2492
1     i    40    102  2442    2448
2     i    40    100  2402    2410
3     l    40    102  2372    2382
4     m    40    102  2312    2358
5     u    40    102  2292    2310
6     i    40    104  2210    2260
7     l    40    104  2180    2208
8     i    40    104  2140    2166
9     l    40    104  2124    2134
10    .   203    213   191     198
11    3   235    262   131     198
12    A   275    347   147     239
13    M   363    465   145     239
然后使用:

但如果不需要数据清理:

m = df[df['5'] == 'm']
print (m)
     0  5   6    7     8     9
1  0.0  m  38  104  2456  2492
5  4.0  m  40  102  2312  2358

df1 = df[(df['6'] == '40') & (df['7'] == '102')]
print (df1)
     0  5   6    7     8     9
2  1.0  i  40  102  2442  2448
4  3.0  l  40  102  2372  2382
5  4.0  m  40  102  2312  2358
6  5.0  u  40  102  2292  2310

编辑以包含缺少的开口括号。谢谢。

为了记录,这里是与选择数据相关的文档应该是
df[(df['left']==40)和(df['right']==102)]
(每个条件应该用括号括起来)Hmmm,只接受一个答案。如果没有数据清理,另一个答案是不行的。我怎么能用df1=df[(df['6']='40')和(df['7']='102')只打印列=(0,8)和列=5到7,并且只打印熊猫索引?这有点复杂,但是试一下
df1=df.loc[(df['6']='40')&(df['7']='102'),'0':'8'].loc[5:7]
hmm,试一下
6
7
可能是整数。通过打印(df.columns)df.iloc[,[0,8]]检查它,df.iloc[:,5:7]实际上是解决方案。然而,只有熊猫才知道。
m = df[df['char'] == 'm']
print (m)
  char  left  right   top  bottom
0    m    38    104  2456    2492
4    m    40    102  2312    2358

df1 = df[(df['left'] == 40) & (df['right'] == 102)]
print (df1)
  char  left  right   top  bottom
1    i    40    102  2442    2448
3    l    40    102  2372    2382
4    m    40    102  2312    2358
5    u    40    102  2292    2310
m = df[df['5'] == 'm']
print (m)
     0  5   6    7     8     9
1  0.0  m  38  104  2456  2492
5  4.0  m  40  102  2312  2358

df1 = df[(df['6'] == '40') & (df['7'] == '102')]
print (df1)
     0  5   6    7     8     9
2  1.0  i  40  102  2442  2448
4  3.0  l  40  102  2372  2382
5  4.0  m  40  102  2312  2358
6  5.0  u  40  102  2292  2310
df[df['char']=='m']
df[(df['left']==40) & (df['right']==102)]