我有一个数据框如下:
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
我得到以下内容:
1 0 m 38 104 2456 2492
5 4 m 40 102 2312 2358
如果我给left=40
和right=102
我得
2 1 i 40 102 2442 2448
4 3 l 40 102 2372 2382
5 4 m 40 102 2312 2358
6 5 u 40 102 2292 2310
答案 0 :(得分:1)
我认为您需要首先清理数据框 - 从第一行创建列,然后删除此行:
#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
然后使用boolean indexing
:
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
答案 1 :(得分:0)
df[df['char']=='m']
df[(df['left']==40) & (df['right']==102)]
编辑以包含缺少的开括号。感谢。