尝试从 Pandas DataFrame 中的字典访问第一个值时出现浮点错误

Posted

技术标签:

【中文标题】尝试从 Pandas DataFrame 中的字典访问第一个值时出现浮点错误【英文标题】:Getting a float error when trying to access first value from a dictionary in a Pandas DataFrame 【发布时间】:2021-12-12 05:10:47 【问题描述】:

我有一个 DataFrame,其中一列包含一个字典。我正在尝试使用 apply 和 lambda 函数从字典中返回第一个值,但我不断收到与浮点数相关的错误。这很令人困惑,因为我有一个字典而不是我试图迭代的浮点数。

错误信息示例: 'float' 对象没有属性 'get'

当我运行下面的代码时,我得到 dict 作为对象类型

type(all_addr['street address'][0])

但是当我运行这个时,我得到了关于浮动的错误

all_addr['street address'].apply(lambda x: x.get('address_components'))

这是一个存储在 DataFrame 列中的字典示例:

'address_components': ['long_name': '871',
   'short_name': '871',
   'types': ['street_number'],
  'long_name': '8th Avenue', 'short_name': '8th Ave', 'types': ['route'],
  'long_name': 'Manhattan',
   'short_name': 'Manhattan',
   'types': ['political', 'sublocality', 'sublocality_level_1'],
  'long_name': 'New York',
   'short_name': 'New York',
   'types': ['locality', 'political'],
  'long_name': 'New York County',
   'short_name': 'New York County',
   'types': ['administrative_area_level_2', 'political'],
  'long_name': 'New York',
   'short_name': 'NY',
   'types': ['administrative_area_level_1', 'political'],
  'long_name': 'United States',
   'short_name': 'US',
   'types': ['country', 'political'],
  'long_name': '10019', 'short_name': '10019', 'types': ['postal_code'],
  'long_name': '5761',
   'short_name': '5761',
   'types': ['postal_code_suffix']],
 'formatted_address': '871 8th Ave, New York, NY 10019, USA',
 'geometry': 'location': 'lat': 40.7637343, 'lng': -73.985334,
  'location_type': 'ROOFTOP',
  'viewport': 'northeast': 'lat': 40.76508328029149,
    'lng': -73.9839850197085,
   'southwest': 'lat': 40.7623853197085, 'lng': -73.9866829802915,
 'place_id': 'ChIJtVPYoldYwokRyDoPj7jHHwk',
 'plus_code': 'compound_code': 'Q277+FV New York, NY, USA',
  'global_code': '87G8Q277+FV',
 'types': ['street_address']

基本上我只是想从这个字典中获取 address_components 列表,这样我就可以获取该列表中保存的一些数据元素。我之前在 DataFrames 和字典中使用过类似的功能,并且没有遇到此错误。

我在 Google Colab 中运行它,字典数据来自 Google Maps API。

【问题讨论】:

'street address' 字典中的所有项目吗?还是一些花车? all_addr['street address'] 中的一个值是float,因此当您遍历列值时,您实际上是在执行.9.get() 更有可能的是,您的某些值“缺失”了。 pandas 中的缺失值表示为 NaN,其类型为 float64。因此出现错误。 【参考方案1】:

这可能有助于显示输出 all_addr['street address'].apply(lambda x: type(x))。此外,.apply() 仅从列中获取值非常慢,因此 pd.json_normalize() 可能有助于为您提取 address_components 列表。

【讨论】:

以上是关于尝试从 Pandas DataFrame 中的字典访问第一个值时出现浮点错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python Pandas Dataframe 中的 STRING 列中提取嵌套字典?

如何从pandas DataFrame中制作字典列表?

JSON字典到Python中的Pandas DataFrame

将 pandas.DataFrame 转换为 Python 中的字典列表

Python Pandas 和正则表达式使用字典替换 Dataframe 中的项目

Pandas DataFrame 中的嵌套字典列表