我是熊猫的新手,我有一个csv数据文件,我正在尝试查找特定列的每一行的最大值和最小值。该数据如下所示:
0 PK,K,1,2,3,4,5
1 PK,K,1,2,3,4,5,6,7,8
2 PK,K,1,2,3,4,5,6,7,8
3 K,1,2
4 PK,K,1,2
这是我的 CSV 文件的 1 列(~5 行中的前 600 行)。如您所见,它在每个单元格中都有多个值(这些是学校提供的成绩)。如何从此信息中找到最小值和最大值?提前致谢
我尝试使用 dataFrame.max()/dataFrame.min(),但这给出了整行或整列的最大/最小值。我的问题更特定于单元格。我也想过将每个单元格转换为列表,然后我可以使用 python 默认函数找到最大值/最小值,但我真的不想那样做。我想坚持使用熊猫和数据帧
length_ = gradesOffered.shape
print(length_)
print(gradesOffered.iloc[0:5,0])
print(gradesOffered.iloc[0:5,0].max())
Output:
(660, 1)
0 PK,K,1,2,3,4,5
1 PK,K,1,2,3,4,5,6,7,8
2 PK,K,1,2,3,4,5,6,7,8
3 K,1,2
4 PK,K,1,2
Name: Grades_Offered_All, dtype: object
PK,K,1,2,3,4,5,6,7,8
我的预期输出是(在"最大"情况下):
(660, 1)
0 PK,K,1,2,3,4,5
1 PK,K,1,2,3,4,5,6,7,8
2 PK,K,1,2,3,4,5,6,7,8
3 K,1,2
4 PK,K,1,2
Name: Grades_Offered_All, dtype: object
0 5
1 8
2 8
3 2
4 2
我的预期输出是(在"分钟"的情况下):
(660, 1)
0 PK,K,1,2,3,4,5
1 PK,K,1,2,3,4,5,6,7,8
2 PK,K,1,2,3,4,5,6,7,8
3 K,1,2
4 PK,K,1,2
Name: Grades_Offered_All, dtype: object
0 PK
1 PK
2 PK
3 K
4 PK
您应该创建自己的函数来查找最小值/最大值,并使用 .apply 创建具有每行最小值和最大值的列。尝试根据单个单元格位置找到最小值/最大值会很混乱。
例:
import pandas as pd
def max_school(row):
order = ['PK', 'K', '1', '2', '3', '4', '5', '6', '7', '8']
sort = sorted(row.dropna(), key=lambda x:order.index(x))
return sort[-1]
def min_school(row):
order = ['PK', 'K', '1', '2', '3', '4', '5', '6', '7', '8']
sort = sorted(row.dropna(), key=lambda x:order.index(x))
return sort[0]
df = pd.read_csv('something.csv', dtype=str)
df['Max'] = df.apply(lambda x: max_school(x), axis=1)
df['Min'] = df.apply(lambda x: min_school(x), axis=1)
print(df)
这输出:
1 2 3 4 5 6 7 8 9 10 Max Min
0 NaN NaN NaN PK K 1 2 3 4 5 5 PK
1 PK K 1 2 3 4 5 6 7 8 8 PK
2 PK K 1 2 3 4 5 6 7 8 8 PK
3 NaN NaN NaN NaN NaN NaN NaN K 1 2 2 K
4 NaN NaN NaN NaN NaN NaN PK K 1 2 2 PK