繁体   English   中英

从 Pandas 系列中获取价值

[英]Get value from Pandas Series

我正在使用Pandas处理一些温度数据。

从名为“数据”的DataFrame中,由于这行代码,我得到了第一个数据观察:

first_obs = data['DATE'][0]

请记住,data['DATE'] 是 pandas。 系列object。 数据索引: STATION ELEVATION LATITUDE LONGITUDE DATE PRCP TAVG TMAX TMIN YEAR MONTH

经过一些数据处理后,我使用以下索引创建了一个新的DataFrame ' monthly_data ': MONTH TAVG YEAR temp_celsius ref_temp diff abs_diff

现在我想得到这个 dataframe 的行,在“abs_diff”列中具有最大值:

weather_anomaly = monthly_data.loc[monthly_data['abs_diff'] == monthly_data['abs_diff'].max()]

现在 weather_anomaly 是另一个DataFrame Object 所以现在奇怪的问题出现了:如果我像以前一样编写代码:

weather_anomaly['MONTH'][0]

出现错误:

KeyError Traceback (最近一次调用最后一次) ~\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 3079 尝试:- > 3080 返回 self._engine.get_loc(casted_key) 3081 除了 KeyError 作为错误:

pandas._libs.index.IndexEngine.get_loc() 中的 pandas_libs\index.pyx

pandas._libs.index.IndexEngine.get_loc() 中的 pandas_libs\index.pyx

pandas_libs\hashtable_class_helper.pxi 在 pandas._libs.hashtable.Int64HashTable.get_item()

pandas_libs\hashtable_class_helper.pxi 在 pandas._libs.hashtable.Int64HashTable.get_item()

关键错误:0

上述异常是以下异常的直接原因:

KeyError Traceback (last last call last) in ----> 1 weather_anomaly['MONTH'][0] 2 print('温度异常最大的月份是', weather_anomaly['MONTH'].values[0], '年度',weather_anomaly['YEAR'].values[0],'相差',weather_anomaly['diff'].values[0])

~\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\ series.py in getitem (self, key) 851 852 elif key_is_scalar: --> 853 return self._get_value(key) 854 855如果 is_hashable(key):

~\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\series.py in _get_value(self, label, takeable) 959 960 # 类似于 Index.get_value,但我们不回退到位置 --> 961 loc = self.index.get_loc(label) 962 return self.index._get_values_for_loc(self, loc, label) 963

~\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 3080
return self._engine.get_loc(casted_key) 3081 除了 KeyError as err: -> 3082 raise KeyError(key) from err 3083 3084 if tolerance不是None:

关键错误:0

没有任何解释出现。 幸运的是,这个问题的解决方案很简单:

weather_anomaly['MONTH'].values[0]

所以最后一个问题是尽管 data['DATE'] 和monthly_data['abs_diff'] 都是 pandas。 系列对象为什么 weather_anomaly['abs_diff'][0] 不起作用?

我假设你原来的 DataFrame 有一个带有递增整数的索引列,所以在你的第一个例子中, data['DATE'][0]data['DATE'].iloc[0]返回相同的结果。

但是在您 select 具有max()条件的特定行之后,新的 DataFrame weather_anomaly仅包含一行,该行保持其原始索引可能不为零。

因此,为了 select 的第一行weather_anomaly ,您需要使用.iloc[0]reset_index()并使用[0]

我建议您打印您的 DataFrames,您将清楚地看到索引列的行为。

TL;DR 原因是weather_anomaly['MONTH']的索引不正常integer。

经过一些数据处理后,我使用以下索引创建了一个新的monthly_data月数据: MONTH TAVG YEAR temp_celsius ref_temp diff abs_diff

weather_anomaly = monthly_data.loc[monthly_data['abs_diff'] == monthly_data['abs_diff'].max()]

如上所述,monthly_data 的索引不是monthly_data 在对monthly_data进行操作以获取weather_anomaly之后。 weather_anomaly的索引类似于monthly_data

如果要通过 integer 定位系列,可以使用pandas.Series.iloc() 在你的例子中,

weather_anomaly['MONTH'].iloc[0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM