Python 从大熊猫的给定细胞值中获取行
l具有如下数据帧: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
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)]