不确定正确的标题。但我需要从数据框中取出一个列,并显示前五个结果。该列是整数和不适合结果的混合。作为示例,我创建了一个基本数据框:
regiona col1
a n/a
a 1
a 200
b 208
b 400
b 560
b 600
c 800
c 1120
c 1200
c 1680
d n/a
d n/a
所以跑:
import pandas as pd
df = pd.read_csv('test_data.csv')
然后我创建了一个基本函数,因此我可以在不同的列上使用它,因此构造:
def max_search(indicator):
displaced_count = df[df[indicator] != 'n/a']
table = displaced_count.sort_values([indicator], ascending=[False])
return table.head(5)
但是当我跑步时
max_search('col1')
它返回:
regiona col1
7 c 800
6 b 600
5 b 560
4 b 400
3 b 208
所以它错过了大于800的任何东西。我认为该函数应该做的步骤是:
然而,它不会返回超过800的东西?我错过了一些非常明显的东西吗?
答案 0 :(得分:5)
检查您的数据框dtypes
,现在是object
。所以首先要确保col1
的数据类型是数字。
在pd.read_csv()
使用na_values
,您的功能将按预期工作:
df = pd.read_csv('test_data.csv', na_values='n/a')
# df.dtypes
答案 1 :(得分:3)
你也可以这样做:
df['col1'] = pd.to_numeric(df['col1'], errors='coerce')
df.dropna().sort_values(['col1'], ascending=False).head(5)
regiona col1
10 c 1680.0
9 c 1200.0
8 c 1120.0
7 c 800.0
6 b 600.0